Import xen_4.11.1~pre+1.733450b39b-1~exp1.debian.tar.xz
authorHans van Kranenburg <hans@knorrie.org>
Sun, 8 Jul 2018 12:30:32 +0000 (13:30 +0100)
committerHans van Kranenburg <hans@knorrie.org>
Sun, 8 Jul 2018 12:30:32 +0000 (13:30 +0100)
[dgit import tarball xen 4.11.1~pre+1.733450b39b-1~exp1 xen_4.11.1~pre+1.733450b39b-1~exp1.debian.tar.xz]

119 files changed:
README.md [new file with mode: 0644]
README.source.md [new file with mode: 0644]
arch/amd64/defines [new file with mode: 0644]
arch/arm64/defines [new file with mode: 0644]
arch/armhf/defines [new file with mode: 0644]
arch/defines [new file with mode: 0644]
arch/i386/defines [new file with mode: 0644]
bin/check-patches.sh [new file with mode: 0755]
bin/gencontrol.py [new file with mode: 0755]
bin/genorig.py [new file with mode: 0755]
changelog [new file with mode: 0644]
compat [new file with mode: 0644]
control [new file with mode: 0644]
control.md5sum [new file with mode: 0644]
copyright [new file with mode: 0644]
lib/python/debian_linux/__init__.py [new file with mode: 0644]
lib/python/debian_linux/abi.py [new file with mode: 0644]
lib/python/debian_linux/config.py [new file with mode: 0644]
lib/python/debian_linux/debian.py [new file with mode: 0644]
lib/python/debian_linux/firmware.py [new file with mode: 0644]
lib/python/debian_linux/gencontrol.py [new file with mode: 0644]
lib/python/debian_linux/kconfig.py [new file with mode: 0644]
lib/python/debian_linux/patches.py [new file with mode: 0644]
lib/python/debian_linux/utils.py [new file with mode: 0644]
lib/python/debian_xen/__init__.py [new file with mode: 0644]
lib/python/debian_xen/debian.py [new file with mode: 0644]
libxen-dev.install [new file with mode: 0644]
libxenstore3.0.install [new file with mode: 0644]
libxenstore3.0.symbols [new file with mode: 0644]
patches/misc/tools-include-install.diff [new file with mode: 0644]
patches/misc/tools-pygrub-remove-static-solaris-support [new file with mode: 0644]
patches/misc/tools-xenmon-install.diff [new file with mode: 0644]
patches/misc/tools-xentop-replace-use-of-deprecated-vwprintw.patch [new file with mode: 0644]
patches/misc/toolstestsx86_emulator-pass--no-pie--fno.patch [new file with mode: 0644]
patches/misc/version.diff [new file with mode: 0644]
patches/prefix-abiname/config-prefix.diff [new file with mode: 0644]
patches/prefix-abiname/tools-blktap2-prefix.diff [new file with mode: 0644]
patches/prefix-abiname/tools-console-prefix.diff [new file with mode: 0644]
patches/prefix-abiname/tools-libfsimage-abiname.diff [new file with mode: 0644]
patches/prefix-abiname/tools-libfsimage-prefix.diff [new file with mode: 0644]
patches/prefix-abiname/tools-libxc-abiname.diff [new file with mode: 0644]
patches/prefix-abiname/tools-libxl-abiname.diff [new file with mode: 0644]
patches/prefix-abiname/tools-libxl-prefix.diff [new file with mode: 0644]
patches/prefix-abiname/tools-misc-prefix.diff [new file with mode: 0644]
patches/prefix-abiname/tools-pygrub-prefix.diff [new file with mode: 0644]
patches/prefix-abiname/tools-python-prefix.diff [new file with mode: 0644]
patches/prefix-abiname/tools-rpath.diff [new file with mode: 0644]
patches/prefix-abiname/tools-xcutils-rpath.diff [new file with mode: 0644]
patches/prefix-abiname/tools-xenmon-prefix.diff [new file with mode: 0644]
patches/prefix-abiname/tools-xenpaging-prefix.diff [new file with mode: 0644]
patches/prefix-abiname/tools-xenpmd-prefix.diff [new file with mode: 0644]
patches/prefix-abiname/tools-xenstat-abiname.diff [new file with mode: 0644]
patches/prefix-abiname/tools-xenstat-prefix.diff [new file with mode: 0644]
patches/prefix-abiname/tools-xenstore-prefix.diff [new file with mode: 0644]
patches/prefix-abiname/tools-xentoolcore-abiname.patch [new file with mode: 0644]
patches/prefix-abiname/tools-xentrace-prefix.diff [new file with mode: 0644]
patches/prefix-abiname/ubuntu-tools-libs-abiname.diff [new file with mode: 0644]
patches/series [new file with mode: 0644]
patches/xenstore/tools-fake-xs-restrict.patch [new file with mode: 0644]
patches/xenstore/tools-xenstore-compatibility.diff [new file with mode: 0644]
pycompat [new file with mode: 0644]
rules [new file with mode: 0755]
rules.defs [new file with mode: 0644]
rules.gen [new file with mode: 0644]
rules.real [new file with mode: 0644]
scripts/Makefile [new file with mode: 0644]
scripts/qemu-ifup [new file with mode: 0644]
scripts/xen [new file with mode: 0755]
scripts/xen-dir [new file with mode: 0755]
scripts/xen-init-list [new file with mode: 0755]
scripts/xen-init-name [new file with mode: 0755]
scripts/xen-toolstack [new file with mode: 0755]
scripts/xen-toolstack-wrapper [new file with mode: 0755]
scripts/xen-utils-wrapper [new file with mode: 0755]
scripts/xen-version [new file with mode: 0755]
source/format [new file with mode: 0644]
templates/control.hypervisor.in [new file with mode: 0644]
templates/control.main.in [new file with mode: 0644]
templates/control.source.in [new file with mode: 0644]
templates/control.system.latest.in [new file with mode: 0644]
templates/control.utils.in [new file with mode: 0644]
templates/libxen.bug/control [new file with mode: 0644]
templates/xen-hypervisor.bug/control [new file with mode: 0644]
templates/xen-hypervisor.postinst.in [new file with mode: 0644]
templates/xen-hypervisor.postrm.in [new file with mode: 0644]
templates/xen-utils.bug/control [new file with mode: 0644]
templates/xen-utils.lintian-overrides.in [new file with mode: 0644]
templates/xen-utils.postinst.in [new file with mode: 0644]
templates/xen-utils.prerm.in [new file with mode: 0644]
tree/xen-hypervisor-common/etc/default/grub.d/xen.cfg [new file with mode: 0644]
tree/xen-utils-common/etc/xen/xend-config.sxp [new file with mode: 0644]
tree/xen-utils-common/etc/xen/xend-pci-permissive.sxp [new file with mode: 0644]
tree/xen-utils-common/etc/xen/xend-pci-quirks.sxp [new file with mode: 0644]
tree/xen-utils-common/usr/share/xen-utils-common/default.xen [new file with mode: 0644]
xen-hypervisor-4.11-amd64.postinst [new file with mode: 0644]
xen-hypervisor-4.11-amd64.postrm [new file with mode: 0644]
xen-hypervisor-4.11-arm64.postinst [new file with mode: 0644]
xen-hypervisor-4.11-arm64.postrm [new file with mode: 0644]
xen-hypervisor-4.11-armhf.postinst [new file with mode: 0644]
xen-hypervisor-4.11-armhf.postrm [new file with mode: 0644]
xen-hypervisor-common.install [new file with mode: 0644]
xen-utils-4.11.lintian-overrides [new file with mode: 0644]
xen-utils-4.11.postinst [new file with mode: 0644]
xen-utils-4.11.prerm [new file with mode: 0644]
xen-utils-common.README.Debian [new file with mode: 0644]
xen-utils-common.dirs [new file with mode: 0644]
xen-utils-common.examples [new file with mode: 0644]
xen-utils-common.install [new file with mode: 0644]
xen-utils-common.postinst [new file with mode: 0644]
xen-utils-common.postrm [new file with mode: 0644]
xen-utils-common.preinst [new file with mode: 0644]
xen-utils-common.ucf [new file with mode: 0644]
xen-utils-common.xen.init [new file with mode: 0644]
xen-utils-common.xend.default [new file with mode: 0644]
xen-utils-common.xendomains.default [new file with mode: 0644]
xen-utils-common.xendomains.init [new file with mode: 0644]
xen-utils.NEWS [new file with mode: 0644]
xen-utils.README.Debian [new file with mode: 0644]
xenstore-utils.install [new file with mode: 0644]

diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..c153df5
--- /dev/null
+++ b/README.md
@@ -0,0 +1,7 @@
+Xen packaging for Debian
+========================
+
+For building the Xen packages, [see README.source](README.source.md)
+
+For general information about the Debian Xen Team, [see the
+wiki](https://salsa.debian.org/xen-team/debian-xen/wikis/home).
diff --git a/README.source.md b/README.source.md
new file mode 100644 (file)
index 0000000..c1d52d5
--- /dev/null
@@ -0,0 +1,100 @@
+Xen packaging for Debian
+========================
+
+Step 1: Get the upstream source
+-------------------------------
+
+The upstream Xen source code is not included with the packaging code
+repository.
+
+When doing additional work on a new debian revision of an existing package for
+a specific upstream version, grab the orig tar that's already in the package
+archives and put it just outside the directory of this repository.
+
+To package a new upstream version, an orig tar can be generated by pointing the
+genorig.py progam to your local xen git repository.
+
+Clone the upstream git repository somewhere (not inside the packaging
+directory, somewhere else!):
+
+    -$ git clone https://xenbits.xen.org/git-http/xen.git
+
+After cloning it, we should generate an orig tar from the upstream source.
+
+Based on the version number in the newest debian/changelog entry, a release tag
+or specific commit can be used to generate the orig tar file. For example, if
+the latest entry in changelog is 4.10.0-1, then this will build the orig tar
+from the RELEASE-4.10.0 tag in upstream git:
+
+    -$ debian/bin/genorig.py /path/to/xen.git
+    Generate tarball ../orig/xen_4.10.0.orig.tar.xz
+
+| **Recognized patterns**  | example | uses treeish |
+|--------|------|------|
+| Regular release | 4.10.2 | RELEASE-4.10.2 |
+| Pre version in between stable releases with explicit commit | 4.10.2~pre+1.25e0657e00-1 | 25e0657e00 |
+| Explicit commit while in rc | 4.11.0~rc6+1.35fcb982ea-1~exp1 | 35fcb982ea |
+| Release candidate | 4.11.0~rc7-1~exp1 | 4.11.0-rc7 |
+
+When a version contains an explicit commit hash, it has to be 10 characters long. Since commit ids do not sort, the +1 serves that purpose, and is incremented to +2 etc when switching to another commit.
+
+Step 2: Combine the upstream source and packaging
+-------------------------------------------------
+
+The orig target in debian/rules is our friendly helper here:
+
+    -$ debian/rules orig
+    mkdir -p ../orig
+    tar -C ../orig -xaf ../xen_4.10.0.orig.tar.xz
+    rsync --delete --exclude /debian --exclude .git -a ../orig/xen-4.10.0/ .
+    QUILT_PATCHES='[...]/debian/patches' QUILT_PC=.pc quilt push --quiltrc - -a -q --fuzz=0
+    Applying patch version.diff
+    Applying patch config-prefix.diff
+    [...]
+    Applying patch tools-xentoolcore-abiname.patch
+    Now at patch tools-xentoolcore-abiname.patch
+
+Step 3: Generate missing packaging files
+----------------------------------------
+
+Quite some files in the packaging are generated. At least all the files which
+have version-dependent names etc.
+
+To generate them:
+
+    -$ debian/rules debian/control
+    /usr/bin/make -f debian/rules debian/control-real
+    make[1]: Entering directory '[...]'
+    debian/bin/gencontrol.py
+    md5sum debian/changelog [...] > debian/control.md5sum
+
+    This target is made to fail intentionally, to make sure
+    that it is NEVER run during the automated build. Please
+    ignore the following error, the debian/control file has
+    been generated SUCCESSFULLY.
+
+    exit 1
+    debian/rules:79: recipe for target 'debian/control-real' failed
+    make[1]: *** [debian/control-real] Error 1
+    make[1]: Leaving directory '[...]'
+    debian/rules:69: recipe for target 'debian/control' failed
+    make: *** [debian/control] Error 2
+
+This looks a bit wonky, but it makes sure we're not able to do the actual
+package build without having taken this step.
+
+Step 4: Build the package
+-------------------------
+
+Use your favourite way to build the package. Mine is pbuilder, so I'm doing
+something like
+
+    -$ pdebuild --use-pdebuild-internal \
+      --auto-debsign --debsign-k ABCDEF \
+      --configfile /home/knorrie/.pbuilderrc-sid
+
+Step 5: Cleanup and reset everything
+------------------------------------
+
+To cleanup the whole packaging environment, just do a git clean -dfx, and
+you're ready to continue back at step 2.
diff --git a/arch/amd64/defines b/arch/amd64/defines
new file mode 100644 (file)
index 0000000..8585798
--- /dev/null
@@ -0,0 +1,10 @@
+[base]
+flavours:
+ amd64
+xen-arch: x86_64
+image-suffix: .gz
+
+[amd64_description]
+hardware: AMD64
+hardware-long: all 64bit single- and multiprocessor AMD and Intel
+
diff --git a/arch/arm64/defines b/arch/arm64/defines
new file mode 100644 (file)
index 0000000..b181444
--- /dev/null
@@ -0,0 +1,11 @@
+[base]
+flavours:
+ arm64
+xen-arch: arm64
+image-suffix:
+with-ocaml: no
+
+[arm64_description]
+hardware: ARM64
+hardware-long: all 64bit ARMv8
+
diff --git a/arch/armhf/defines b/arch/armhf/defines
new file mode 100644 (file)
index 0000000..ee6918e
--- /dev/null
@@ -0,0 +1,10 @@
+[base]
+flavours:
+ armhf
+xen-arch: arm32
+image-suffix:
+
+[armhf_description]
+hardware: ARMHF
+hardware-long: all 32bit ARMv7 with virtualisation extensions
+
diff --git a/arch/defines b/arch/defines
new file mode 100644 (file)
index 0000000..2c8073f
--- /dev/null
@@ -0,0 +1,10 @@
+[abi]
+
+[base]
+arches:
+ amd64
+ arm64
+ armhf
+ i386
+featuresets:
+ none
diff --git a/arch/i386/defines b/arch/i386/defines
new file mode 100644 (file)
index 0000000..40b0588
--- /dev/null
@@ -0,0 +1,11 @@
+[base]
+flavours:
+ amd64
+xen-arch: x86_32
+
+[amd64_base]
+xen-arch: x86_64
+
+[amd64_description]
+hardware: AMD64
+hardware-long: all 64bit single- and multiprocessor AMD and Intel
diff --git a/bin/check-patches.sh b/bin/check-patches.sh
new file mode 100755 (executable)
index 0000000..8de7c5e
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/sh -e
+
+TMPDIR=$(mktemp -d)
+trap "rm -rf $TMPDIR" EXIT
+grep -v "^#"  debian/patches/series | awk '{if (NF == 1) print "debian/patches/" $1}' | sort -u > $TMPDIR/used
+find debian/patches -type f -name "*.diff" -printf "%p\n" | sort > $TMPDIR/avail
+echo "Used patches"
+echo "=============="
+cat $TMPDIR/used
+echo
+echo "Unused patches"
+echo "=============="
+fgrep -v -f $TMPDIR/used $TMPDIR/avail
diff --git a/bin/gencontrol.py b/bin/gencontrol.py
new file mode 100755 (executable)
index 0000000..2a801c0
--- /dev/null
@@ -0,0 +1,125 @@
+#!/usr/bin/env python3
+
+import os, sys
+sys.path.append(os.path.join(sys.path[0], "../lib/python"))
+
+from debian_xen.debian import VersionXen
+from debian_linux.config import ConfigCoreHierarchy
+from debian_linux.debian import Changelog, PackageArchitecture
+from debian_linux.gencontrol import Gencontrol as Base
+from debian_linux.utils import Templates
+
+class Gencontrol(Base):
+    config_schema = {
+        'description': {
+        }
+    }
+
+    def __init__(self):
+        super(Gencontrol, self).__init__(ConfigCoreHierarchy(self.config_schema, ["debian/arch"]), Templates(["debian/templates"]))
+        self.process_changelog()
+
+    def do_main_setup(self, vars, makeflags, extra):
+        makeflags.update({
+            'VERSION': self.version.xen_version,
+        })
+
+    def do_arch_setup(self, vars, makeflags, arch, extra):
+        config_entry = self.config.merge('base', arch)
+        config_entry_description = self.config.merge('description', arch)
+
+        for i in (
+            ('xen-arch', 'XEN_ARCH'),
+        ):
+            makeflags[i[1]] = config_entry[i[0]]
+
+    def do_arch_packages(self, packages, makefile, arch, vars, makeflags, extra):
+        packages_main = self.process_packages(self.templates["control.main"], vars)
+        packages_utils = self.process_packages(self.templates["control.utils"], vars)
+
+        for package in packages_main + packages_utils:
+            name = package['Package']
+            if name in packages:
+                package = packages.get(name)
+            else:
+                packages.append(package)
+
+            arches = package.setdefault('Architecture', PackageArchitecture())
+            if 'all' not in arches:
+                arches.add(arch)
+
+        package_utils_name = packages_utils[0]['Package']
+
+        for i in ('postinst', 'prerm', 'lintian-overrides'):
+            j = self.substitute(self.templates["xen-utils.%s" % i], vars)
+            open("debian/%s.%s" % (package_utils_name, i), 'w').write(j)
+
+        cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-arch-arch %s" % makeflags]
+        cmds_build = ["$(MAKE) -f debian/rules.real build-arch-arch %s" % makeflags]
+        cmds_setup = ["$(MAKE) -f debian/rules.real setup-arch %s" % makeflags]
+        makefile.add('binary-arch_%s_real' % arch, cmds = cmds_binary_arch)
+        makefile.add('build-arch_%s_real' % arch, cmds = cmds_build)
+        makefile.add('setup_%s_real' % arch, cmds = cmds_setup)
+
+    def do_flavour_setup(self, vars, makeflags, arch, featureset, flavour, extra):
+        config_entry = self.config.merge('base', arch, featureset, flavour)
+        config_description = self.config.merge('description', arch, featureset, flavour)
+
+        vars['class'] = config_description['hardware']
+        vars['longclass'] = config_description.get('hardware-long') or vars['class']
+
+        for i in (
+            ('xen-arch', 'XEN_ARCH'),
+            ('image-suffix', 'IMAGE_SUFFIX'),
+        ):
+            if i[0] in config_entry:
+                makeflags[i[1]] = config_entry[i[0]]
+
+    def do_flavour_packages(self, packages, makefile, arch, featureset, flavour, vars, makeflags, extra):
+        hypervisor = self.templates["control.hypervisor"]
+        system_latest = self.templates["control.system.latest"]
+
+        if not 'desc' in vars:
+            vars['desc'] = ''
+
+        packages_own = []
+        packages_own.extend(self.process_packages(hypervisor, vars))
+        packages_dummy = self.process_packages(system_latest, vars)
+
+        for package in packages_own + packages_dummy:
+            name = package['Package']
+            package.setdefault('Architecture', PackageArchitecture()).add(arch)
+            if name in packages:
+                package = packages.get(name)
+            else:
+                packages.append(package)
+
+            arches = package.setdefault('Architecture', PackageArchitecture())
+            if 'all' not in arches:
+                arches.add(arch)
+
+        package_name = packages_own[0]['Package']
+
+        for i in ('postinst', 'postrm'):
+            j = self.substitute(self.templates["xen-hypervisor.%s" % i], vars)
+            open("debian/%s.%s" % (package_name, i), 'w').write(j)
+
+        cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-arch-flavour %s" % makeflags]
+        cmds_build = ["$(MAKE) -f debian/rules.real build-arch-flavour %s" % makeflags]
+        cmds_setup = ["$(MAKE) -f debian/rules.real setup-flavour %s" % makeflags]
+
+        cmds_binary_arch += ["$(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='%s' %s" % (u' '.join([u"-p%s" % i['Package'] for i in packages_dummy]), makeflags)]
+
+        makefile.add("binary-arch_%s_%s_%s" % (arch, featureset, flavour), cmds = cmds_binary_arch)
+        makefile.add("build-arch_%s_%s_%s" % (arch, featureset, flavour), cmds = cmds_build)
+        makefile.add("setup_%s_%s_%s" % (arch, featureset, flavour), cmds = cmds_setup)
+
+    def process_changelog(self):
+        changelog = Changelog(version = VersionXen)
+        self.version = changelog[0].version
+        self.vars = {
+            'version': self.version.xen_version,
+        }
+
+if __name__ == '__main__':
+    Gencontrol()()
diff --git a/bin/genorig.py b/bin/genorig.py
new file mode 100755 (executable)
index 0000000..1d3c5a1
--- /dev/null
@@ -0,0 +1,93 @@
+#!/usr/bin/env python3
+
+import sys
+sys.path.append(sys.path[0] + '/../lib/python')
+
+import itertools
+import os, os.path
+import shutil
+import subprocess
+
+from debian_xen.debian import VersionXen
+from debian_linux.debian import Changelog
+
+
+class Main(object):
+    log = sys.stdout.write
+
+    def __init__(self, options, repo):
+        self.options = options
+        self.repo = repo
+
+        self.changelog_entry = Changelog(version=VersionXen)[0]
+        self.source = self.changelog_entry.source
+        self.version = self.changelog_entry.version
+
+        if options.override_version:
+            self.version = VersionXen('%s-0' % options.override_version)
+
+        if options.component:
+            self.orig_dir = options.component
+            self.orig_tar = '%s_%s.orig-%s.tar.xz' % (self.source, self.version.upstream, options.component)
+        else:
+            self.orig_dir = '%s-%s' % (self.source, self.version.upstream)
+            self.orig_tar = '%s_%s.orig.tar.xz' % (self.source, self.version.upstream)
+
+    def __call__(self):
+        out = "../orig/%s" % self.orig_tar
+
+        if self.options.tag:
+            treeish = self.options.tag
+        else:
+            treeish = self.changelog_entry.version.treeish
+
+        self.log("Generate tarball %s from treeish %s\n" % (out, treeish))
+
+        try:
+            os.stat(out)
+            raise RuntimeError("Destination already exists")
+        except OSError: pass
+
+        try:
+            os.mkdir("../orig")
+        except OSError:
+            pass
+
+        ga_exists = os.path.exists('.gitattributes')
+        try:
+            if ga_exists:
+                os.rename('.gitattributes','.gitattributes.genorig-saved')
+            with open('.gitattributes', 'w') as ga:
+                print('* -export-subst\n', file=ga)
+            with open(out, 'wb') as f:
+                _cmd = ('git', 'archive', '--worktree-attributes', '--prefix', '%s/' % self.orig_dir, treeish)
+                p1 = subprocess.Popen(_cmd, stdout=subprocess.PIPE, cwd=self.repo)
+                subprocess.check_call(('xz', ), stdin=p1.stdout, stdout=f)
+                if p1.wait():
+                    raise RuntimeError
+        except:
+            os.unlink(out)
+            raise
+
+        try:
+            if ga_exists:
+                os.rename('.gitattributes.genorig-saved','.gitattributes')
+            else:
+                os.unlink('.gitattributes')
+        except Exception: pass
+
+        try:
+            os.link(os.path.join('..', 'orig', self.orig_tar), os.path.join('..', self.orig_tar))
+        except OSError:
+            pass
+
+
+if __name__ == '__main__':
+    from optparse import OptionParser
+    p = OptionParser(prog=sys.argv[0], usage='%prog [OPTION]... DIR')
+    p.add_option('-c', '--component', dest='component')
+    p.add_option('-t', '--tag', dest='tag')
+    p.add_option('-V', '--override-version', dest='override_version')
+    options, args = p.parse_args()
+    assert(len(args) == 1)
+    Main(options, *args)()
diff --git a/changelog b/changelog
new file mode 100644 (file)
index 0000000..7d3facf
--- /dev/null
+++ b/changelog
@@ -0,0 +1,1500 @@
+xen (4.11.1~pre+1.733450b39b-1~exp1) experimental; urgency=medium
+
+  [ Hans van Kranenburg ]
+  * Update to 4.11.1-pre commit 733450b39b, which also contains:
+    - Additional fix for: Unlimited recursion in linear pagetable de-typing
+      XSA-240 CVE-2017-15595 (listed as xsa240-4.8/0004)
+    - Fix x86 PV guests may gain access to internally used pages
+      XSA-248 CVE-2017-17566
+    - Fix broken x86 shadow mode refcount overflow check
+      XSA-249 CVE-2017-17563
+    - Fix improper x86 shadow mode refcount error handling
+      XSA-250 CVE-2017-17564
+    - Fix improper bug check in x86 log-dirty handling
+      XSA-251 CVE-2017-17565
+    - Fix: DoS via non-preemptable L3/L4 pagetable freeing
+      XSA-252 CVE-2018-7540
+    - Fix x86: memory leak with MSR emulation
+      XSA-253 CVE-2018-5244
+    - Multiple parts of fixes for...
+      Information leak via side effects of speculative execution
+      XSA-254 CVE-2017-5753 CVE-2017-5715 CVE-2017-5754
+      - XPTI stage 1 a.k.a. 'Meltdown band-aid', XPTI-S1 or XPTI-lite
+      - Branch predictor hardening for ARM CPUs
+      - Support compiling with indirect branch thunks (e.g. retpoline)
+      - Report details of speculative mitigations in boot logging
+    - Fix: grant table v2 -> v1 transition may crash Xen
+      XSA-255 CVE-2018-7541
+    - Fix: x86 PVH guest without LAPIC may DoS the host
+      XSA-256 CVE-2018-7542
+    - The "Comet" shim, which can be used as a mitigation for Meltdown to
+      shield the hypervisor against 64-bit PV guests.
+    - Fix: Information leak via crafted user-supplied CDROM
+      XSA-258 CVE-2018-10472
+    - Fix: x86: PV guest may crash Xen with XPTI
+      XSA-259 CVE-2018-10471
+    - Fix: x86: mishandling of debug exceptions
+      XSA-260 CVE-2018-8897
+    - Fix: x86 vHPET interrupt injection errors
+      XSA-261 CVE-2018-10982
+    - Fix: qemu may drive Xen into unbounded loop
+      XSA-262 CVE-2018-10981
+    - Fix: Speculative Store Bypass
+      XSA-263 CVE-2018-3639
+    - Fix: preemption checks bypassed in x86 PV MM handling
+      XSA-264 CVE-2018-12891
+    - Fix: x86: #DB exception safety check can be triggered by a guest
+      XSA-265 CVE-2018-12893
+    - Fix: libxl fails to honour readonly flag on HVM emulated SCSI disks
+      XSA-266 CVE-2018-12892
+    - Fix: Speculative register leakage from lazy FPU context switching
+      XSA-267 CVE-2018-3665
+    - Fix: Use of v2 grant tables may cause crash on ARM
+      XSA-268 CVE-2018-15469
+    - Fix: x86: Incorrect MSR_DEBUGCTL handling lets guests enable BTS
+      XSA-269 CVE-2018-15468
+    - Fix: oxenstored does not apply quota-maxentity
+      XSA-272 CVE-2018-15470
+    - Fix: L1 Terminal Fault speculative side channel
+      XSA-273 CVE-2018-3620
+  * Merge changes for 4.9 from the ubuntu packaging (thanks, Stefan Bader):
+    - Rebase patches against upstream source (line numbers etc).
+    - debian/rules.real:
+      - Add a call to build common tool headers.
+      - Add a call to install common tool headers.
+    - debian/libxen-dev.install, d/p/ubuntu-tools-libs-abiname.diff:
+      - Add additional modifications for new libxendevicemodel.
+    - debian/patches/tools-fake-xs-restrict.patch:
+      - Re-introduce (fake) xs_restrict call to keep libxenstore version at
+        3.0 for now.
+    - debian/libxenstore3.0.symbols: add xs_control_command
+  * Rebase patches against 4.10 upstream source.
+  * Rebase patches against 4.11 upstream source.
+  * Add README.source.md to document how the packaging works.
+  * This package builds correctly with gcc 7. (Closes: #853710)
+  * Fix grub config file conflict when upgrading from Stretch. (Closes: #852545)
+  * Init scripts: Do not kill per-domain qemu processes. (Closes: #879751)
+  * debian/patches: Fix "'vwprintw' is deprecated" gcc 8 compilation error
+
+  [ Mark Pryor ]
+  * Fix shared library build dependencies for the new xentoolcore library.
+
+  [ John Keates ]
+  * Enable OVMF (Closes: #858962)
+
+ -- Hans van Kranenburg <hans@knorrie.org>  Sun, 08 Jul 2018 14:30:32 +0200
+
+xen (4.8.2+xsa245-0+deb9u1) stretch-security; urgency=high
+
+  * Update to upstream stable 4.8 branch, which is currently at Xen 4.8.2
+    plus a number of bugfixes and security fixes.
+    Result is that we now include security fixes for:
+       XSA-231 CVE-2017-14316
+       XSA-232 CVE-2017-14318
+       XSA-233 CVE-2017-14317
+       XSA-234 CVE-2017-14319
+       (235 already included in 4.8.1-1+deb9u3)
+       XSA-236 CVE-2017-15597
+       XSA-237 CVE-2017-15590
+       XSA-238 (no CVE yet)
+       XSA-239 CVE-2017-15589
+       XSA-240 CVE-2017-15595
+       XSA-241 CVE-2017-15588
+       XSA-242 CVE-2017-15593
+       XSA-243 CVE-2017-15592
+       XSA-244 CVE-2017-15594
+       XSA-245 (no CVE yet)
+    and a number of upstream functionality fixes, which are not easily
+    disentangled from the security fixes.
+  * Apply two more security fixes:
+       XSA-246 (no CVE yet)
+       XSA-247 (no CVE yet)
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Sat, 25 Nov 2017 11:26:37 +0000
+
+xen (4.8.1-1+deb9u3) stretch-security; urgency=high
+
+  * Security fixes for
+      XSA-226 CVE-2017-12135
+      XSA-227 CVE-2017-12137
+      XSA-228 CVE-2017-12136
+      XSA-230 CVE-2017-12855
+      XSA-235 (no CVE yet)
+  * Adjust changelog entry for 4.8.1-1+deb9u2 to record
+    that XSA-225 fix was indeed included.
+  * Security fix for XSA-229 not included as that bug is in Linux, not Xen.
+  * Security fixes for XSA-231..234 inc. not inclued as still embargoed.
+
+ -- Ian Jackson <ian.jackson@eu.citrix.com>  Thu, 07 Sep 2017 19:17:58 +0100
+
+xen (4.8.1-1+deb9u2) stretch-security; urgency=high
+
+  * Security fixes for
+      XSA-216 XSA-217 XSA-218 XSA-219 XSA-220
+      XSA-221 XSA-222 XSA-223 XSA-224 XSA-225
+
+ -- Ian Jackson <ian.jackson@eu.citrix.com>  Tue, 20 Jun 2017 14:06:34 +0100
+
+xen (4.8.1-1+deb9u1) unstable; urgency=medium
+
+  * Security fixes for XSA-213 (Closes:#861659) and XSA-214
+    (Closes:#861660).  (Xen 4.7 and later is not affected by XSA-215.)
+
+ -- Ian Jackson <ian.jackson@eu.citrix.com>  Tue, 02 May 2017 12:19:57 +0100
+
+xen (4.8.1-1) unstable; urgency=high
+
+  * Update to upstream 4.8.1 release.
+    Changes include numerous bugfixes, including security fixes for:
+      XSA-212 / CVE-2017-7228   Closes:#859560
+      XSA-207 / no cve yet      Closes:#856229
+      XSA-206 / no cve yet      no Debian bug
+
+ -- Ian Jackson <ian.jackson@eu.citrix.com>  Tue, 18 Apr 2017 18:05:00 +0100
+
+xen (4.8.1~pre.2017.01.23-1) unstable; urgency=medium
+
+  * Update to current upstream stable-4.8 git branch (Xen 4.8.1-pre).
+    Contains bugfixes.
+  * debian/control-real etc.: debian.py: Allow version numbers like this.
+
+ -- Ian Jackson <ian.jackson@eu.citrix.com>  Mon, 23 Jan 2017 16:03:31 +0000
+
+xen (4.8.0-1) unstable; urgency=high
+
+  * Update to upstream Xen 4.8.0.
+    Includes the following security fixes:
+        XSA-201   CVE-2016-9815 CVE-2016-9816 CVE-2016-9817 CVE-2016-9818
+        XSA-198   CVE-2016-9379 CVE-2016-9380
+        XSA-196   CVE-2016-9378 CVE-2016-9377   Closes:#845669
+        XSA-195   CVE-2016-9383
+        XSA-194   CVE-2016-9384                 Closes:#845667
+        XSA-193   CVE-2016-9385
+        XSA-192   CVE-2016-9382
+        XSA-191   CVE-2016-9386
+    Includes other bugfixes too:
+        Closes:#812166, Closes:#818525.
+
+  Cherry picks from upstream:
+  * Security fixes:
+        XSA-204   CVE-2016-10013                 Closes:#848713
+        XSA-203   CVE-2016-10025
+        XSA-202   CVE-2016-10024
+    For completeness, the following XSAs do not apply here:
+        XSA-197   CVE-2016-9381      Bug is in qemu
+        XSA-199   CVE-2016-9637      Bug is in qemu
+        XSA-200   CVE-2016-9932      Xen 4.8 is not affected
+  * Cherry pick a build failure fix:
+      "x86/emul: add likely()/unlikely() to test harness"
+
+  [ Ian Jackson ]
+  * Drop -lcrypto search from upstream configure, and from our
+    Build-Depends.  Closes:#844419.
+  * Change my own email address to my work (Citrix) address.  When
+    uploading, I will swap hats to effectively sponsor my own upload.
+
+  [ Ian Campbell ]
+  * Start a qemu process in dom0 to service the toolstacks loopback disk
+    attaches. (Closes: #770456)
+  * Remove correct pidfile when stopping xenconsoled.
+  * Check that xenstored has actually started before talking to it.
+    Incorporate a timeout so as not to block boot (Mitigates #737613)
+  * Correct syntax error in xen-init-list when running with xend
+    (Closes: #763102)
+  * Apply SELinux labels to directories created by initscripts. Patch from
+    Russell Coker. (Closes: #764912)
+  * Include a reportbug control file to redirect bugs to src:xen for
+    packages which contain the Xen version in the name.  Closes:#796370.
+
+  [ Lubomir Host ]
+  * Fix xen-init-name to not fail looking for a nonexistent 'config'
+    entry in xl's JSON output.  Closes:#818129.
+
+ -- Ian Jackson <ian.jackson@eu.citrix.com>  Thu, 22 Dec 2016 14:51:46 +0000
+
+xen (4.8.0~rc5-1) unstable; urgency=medium
+
+  * New upstream version, Xen 4.8.0 RC5.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Fri, 11 Nov 2016 15:26:58 +0000
+
+xen (4.8.0~rc3-1) unstable; urgency=medium
+
+  * Upload 4.8.0~rc3 to unstable.  (RC5 is out upstream, but let's not
+    update to that in the middle of the Xen 4.6 -> 4.8 transition.)
+  * No source changes.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Sat, 05 Nov 2016 15:08:47 +0000
+
+xen (4.8.0~rc3-0exp2) experimental; urgency=medium
+
+  * Build-Depend on iasl on all architectures.  ARM has ACPI now.
+    Fixes FTBFS on arm64 (at least).
+  * Add qemu-utils and seabios to Suggests.
+  * Pass -no-pie -fno-pic to x86 emulator test build.  (Patch
+    also submitted upstream.)  Fixes FTBFS on i386 with GCC6.
+  * Add myself to Uploaders.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Tue, 01 Nov 2016 18:00:25 +0000
+
+xen (4.8.0~rc3-0exp1) experimental; urgency=high
+
+  * New upstream version, Xen 4.8.0 RC3.
+    Fixes many outstanding CVEs.
+  * Incorporated many changes from 4.8.0-0ubuntu2
+    - libxen-dev is M-A: same
+    - Work around grep bug http://bugs.launchpad.net/bugs/1547466
+    - debian/xen-hypervisor-4.6.xen.cfg:
+      Additional config file to simplify grub configuration.
+    - Use new library/abiname scheme.
+    - Document what xl and xm are in default.xen
+    - Add libvirtd dependency to xendomains init script
+    (Thanks to Stefan Bader and others.)
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Mon, 24 Oct 2016 17:31:27 +0100
+
+xen (4.6.0-1+nmu2) unstable; urgency=medium
+
+  * Ensure debian/control.md5sum is correctly updated. Fixes FTBFS of
+    4.6.0-1+nmu1 on buildds where linux-support-4.2.0-1 is not expected to be
+    installed.
+
+ -- Ian Campbell <ijc@debian.org>  Tue, 09 Feb 2016 16:41:16 +0000
+
+xen (4.6.0-1+nmu1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * Drop unused patching in of $(PREFIX), $(SBINDIR) and $(BINDIR)
+    which are no longer used by the upstream build system.
+  * Use correct/consistent LIBEXEC dirs throughout build
+    (Closes: #805508).
+
+ -- Ian Campbell <ijc@debian.org>  Tue, 19 Jan 2016 14:43:54 +0000
+
+xen (4.6.0-1) unstable; urgency=medium
+
+  * New upstream release.
+  * CVE-2015-7812
+  * CVE-2015-7813
+  * CVE-2015-7814
+  * CVE-2015-7835
+  * CVE-2015-7969
+  * CVE-2015-7970
+  * CVE-2015-7971
+  * CVE-2015-7972
+
+ -- Bastian Blank <waldi@debian.org>  Sun, 01 Nov 2015 21:49:07 +0100
+
+xen (4.5.1~rc1-1) experimental; urgency=medium
+
+  [ Ian Campbell ]
+  * Use xen-init-dom0 from initscript when it is available.
+  * Install some user facing docs in xen-utils-common. (Closes: #688308)
+
+  [ Bastian Blank ]
+  * New upstream release candidate.
+
+ -- Bastian Blank <waldi@debian.org>  Sun, 31 May 2015 21:59:56 +0200
+
+xen (4.5.0-1) experimental; urgency=medium
+
+  [ Ian Campbell ]
+  * New upstream release
+
+ -- Bastian Blank <waldi@debian.org>  Wed, 21 Jan 2015 20:21:45 +0100
+
+xen (4.5.0~rc3-1) experimental; urgency=medium
+
+  * New upstream release candidate.
+  * Re-add xend config.
+
+ -- Bastian Blank <waldi@debian.org>  Wed, 17 Dec 2014 22:37:23 +0100
+
+xen (4.4.1-6) unstable; urgency=medium
+
+  * Fix starvation of writers in locks.
+    CVE-2014-9065
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 11 Dec 2014 15:56:08 +0100
+
+xen (4.4.1-5) unstable; urgency=medium
+
+  * Fix excessive checks of hypercall arguments.
+    CVE-2014-8866
+  * Fix boundary checks of emulated MMIO access.
+    CVE-2014-8867
+  * Fix additional memory leaks in xl. (closes: #767295)
+
+ -- Bastian Blank <waldi@debian.org>  Sun, 30 Nov 2014 20:13:32 +0100
+
+xen (4.4.1-4) unstable; urgency=medium
+
+  [ Bastian Blank ]
+  * Make operations pre-emptible.
+    CVE-2014-5146, CVE-2014-5149
+  * Don't allow page table updates from non-PV page tables.
+    CVE-2014-8594
+  * Enforce privilege level while loading code segment.
+    CVE-2014-8595
+  * Fix reference counter leak.
+    CVE-2014-9030
+  * Use linux 3.16.0-4 stuff.
+  * Fix memory leak in xl. (closes: #767295)
+
+  [ Ian Campbell ]
+  * Add licensing for tools/python/logging to debian/copyright.
+    (Closes: #759384)
+  * Correctly include xen-init-name in xen-utils-common. (Closes: #769543)
+  * xen-utils recommends grub-xen-host package (Closes: #770460)
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 27 Nov 2014 20:17:36 +0100
+
+xen (4.4.1-3) unstable; urgency=medium
+
+  [ Bastian Blank ]
+  * Remove unused build-depencencies.
+  * Extend list affected systems for broken interrupt assignment.
+    CVE-2013-3495
+  * Fix race in hvm memory management.
+    CVE-2014-7154
+  * Fix missing privilege checks on instruction emulation.
+    CVE-2014-7155, CVE-2014-7156
+  * Fix uninitialized control structures in FIFO handling.
+    CVE-2014-6268
+  * Fix MSR range check in emulation.
+    CVE-2014-7188
+
+  [ Ian Campbell ]
+  * Install xen.efi into /boot for amd64 builds.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 17 Oct 2014 16:27:46 +0200
+
+xen (4.4.1-2) unstable; urgency=medium
+
+  * Re-build with correct content.
+  * Use dh_lintian.
+
+ -- Bastian Blank <waldi@debian.org>  Wed, 24 Sep 2014 20:23:14 +0200
+
+xen (4.4.1-1) unstable; urgency=medium
+
+  * New upstream release.
+    - Fix several vulnerabilities. (closes: #757724)
+      CVE-2014-2599, CVE-2014-3124,
+      CVE-2014-3967, CVE-2014-3968,
+      CVE-2014-4021
+
+ -- Bastian Blank <waldi@debian.org>  Sun, 21 Sep 2014 10:45:47 +0200
+
+xen (4.4.0-5) unstable; urgency=medium
+
+  [ Ian Campbell ]
+  * Expand on the descriptions of some packages. (Closes: #466683)
+  * Clarify where xen-utils-common is required. (Closes: #612403)
+  * No longer depend on gawk. Xen can now use any awk one of which is always
+    present. (Closes: #589176)
+  * Put core dumps in /var/lib/xen/dump and ensure it exists.
+    (Closes: #444000)
+
+  [ Bastian Blank ]
+  * Handle JSON output from xl in xendomains init script.
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 06 Sep 2014 22:11:20 +0200
+
+xen (4.4.0-4) unstable; urgency=medium
+
+  [ Bastian Blank ]
+  * Also remove unused OCaml packages from control file.
+  * Make library packages multi-arch: same. (closes: #730417)
+  * Use debhelper compat level 9. (closes: #692352)
+
+  [ Ian Campbell ]
+  * Correct contents of /etc/xen/scripts/hotplugpath.sh (Closes: #706283)
+  * Drop references cpuperf-xen and cpuperf-perfcntr. (Closes: #733847)
+  * Install xentrace_format(1), xentrace(8) and xentop(1). (Closes: #407143)
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 30 Aug 2014 13:34:04 +0200
+
+xen (4.4.0-3) unstable; urgency=medium
+
+  [ Ian Campbell ]
+  * Use correct SeaBIOS binary which supports Xen (Closes: #737905).
+
+  [ Bastian Blank ]
+  * Really update config.{sub,guess}.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 29 Aug 2014 16:33:19 +0200
+
+xen (4.4.0-2) unstable; urgency=medium
+
+  * Remove broken and unused OCaml-support.
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 18 Aug 2014 15:18:42 +0200
+
+xen (4.4.0-1) unstable; urgency=medium
+
+  [ Bastian Blank ]
+  * New upstream release.
+    - Update scripts for compatiblity with latest coreutils.
+      (closes: #718898)
+    - Fix guest reboot with xl toolstack. (closes: #727100)
+    - CVE-2013-6375: Insufficient TLB flushing in VT-d (iommu) code.
+      (closes: #730254)
+    - xl support for global VNC options. (closes: #744157)
+    - vif scripts can now be named relative to /etc/xen/scripts.
+      (closes: #744160)
+    - Support for arbitrary sized SeaBIOS binaries. (closes: #737905)
+    - pygrub searches for extlinux.conf in the expected places.
+      (closes: #697407)
+    - Update scripts to use correct syntax for ip command.
+      (closes: #705659)
+  * Fix install of xend configs to not break compatibility.
+
+  [ Ian Campbell ]
+  * Disable blktap1 support using new configure option instead of by patching.
+  * Disable qemu-traditional and rombios support using new configure option
+    instead of by patching. No need to build-depend on ipxe any more.
+  * Use system qemu-xen via new configure option instead of patching.
+  * Use system seabios via new configure option instead of patching.
+  * Use EXTRA_CFLAGS_XEN_TOOLS and APPEND_{CPPFLAGS,LDFLAGS} during build.
+  * Add support for armhf and arm64.
+  * Update config.{sub,guess}.
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 09 Aug 2014 13:09:00 +0200
+
+xen (4.3.0-3) unstable; urgency=low
+
+  * Revive hypervisor on i386.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 18 Oct 2013 00:15:16 +0200
+
+xen (4.3.0-2) unstable; urgency=low
+
+  * Force proper install order. (closes: #721999)
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 05 Oct 2013 15:03:36 +0000
+
+xen (4.3.0-1) unstable; urgency=low
+
+  * New upstream release.
+    - Fix HVM PCI passthrough. (closes: #706543)
+  * Call configure with proper arguments.
+  * Remove now empty xen-docs package.
+  * Disable external code retrieval.
+  * Drop all i386 hypervisor packages.
+  * Drop complete blktap support.
+  * Create /run/xen.
+  * Make xen-utils recommend qemu-system-x86. (closes: #688311)
+    - This version comes with audio support. (closes: #635166)
+  * Make libxenlight and libxlutil public. (closes: #644390)
+    - Set versioned ABI name.
+    - Install headers.
+    - Move libs into normal library path.
+  * Use build flags in the tools build.
+    - Fix fallout from harderning flags.
+  * Update Standards-Version to 3.9.4. No changes.
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 05 Sep 2013 13:54:03 +0200
+
+xen (4.2.2-1) unstable; urgency=low
+
+  * New upstream release.
+    - Fix build with gcc 4.8. (closes: #712376)
+  * Build-depend on libssl-dev. (closes: #712366)
+  * Enable hardening as much as possible.
+  * Re-enable ocaml build fixes. (closes: #695176)
+  * Check for out-of-bound values in CPU affinity setup.
+    CVE-2013-2072
+  * Fix information leak on AMD CPUs.
+    CVE-2013-2076
+  * Recover from faults on XRSTOR.
+    CVE-2013-2077
+  * Properly check guest input to XSETBV.
+    CVE-2013-2078
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 11 Jul 2013 00:28:24 +0200
+
+xen (4.2.1-2) unstable; urgency=low
+
+  * Actually upload to unstable.
+
+ -- Bastian Blank <waldi@debian.org>  Sun, 12 May 2013 00:20:58 +0200
+
+xen (4.2.1-1) experimental; urgency=low
+
+  * New upstream release.
+  * Enable usage of seabios.
+  * Fix some toolchain issues.
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 11 May 2013 23:55:46 +0200
+
+xen (4.2.0-2) experimental; urgency=low
+
+  * Support JSON output in domain init script helper.
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 01 Oct 2012 15:11:30 +0200
+
+xen (4.2.0-1) experimental; urgency=low
+
+  * New upstream release.
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 18 Sep 2012 13:54:30 +0200
+
+xen (4.2.0~rc3-1) experimental; urgency=low
+
+  * New upstream snapshot.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 07 Sep 2012 20:28:46 +0200
+
+xen (4.2.0~rc2-1) experimental; urgency=low
+
+  * New upstream snapshot.
+  * Build-depend against libglib2.0-dev and libyajl-dev.
+  * Disable seabios build for now.
+  * Remove support for Lenny and earlier.
+  * Support build-arch and build-indep make targets.
+
+ -- Bastian Blank <waldi@debian.org>  Sun, 13 May 2012 12:21:10 +0000
+
+xen (4.1.4-4) unstable; urgency=high
+
+  * Make several long runing operations preemptible.
+    CVE-2013-1918
+  * Fix source validation for VT-d interrupt remapping.
+    CVE-2013-1952
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 02 May 2013 14:30:29 +0200
+
+xen (4.1.4-3) unstable; urgency=high
+
+  * Fix return from SYSENTER.
+    CVE-2013-1917
+  * Fix various problems with guest interrupt handling.
+    CVE-2013-1919
+  * Only save pointer after access checks.
+    CVE-2013-1920
+  * Fix domain locking for transitive grants.
+    CVE-2013-1964
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 19 Apr 2013 13:01:57 +0200
+
+xen (4.1.4-2) unstable; urgency=low
+
+  * Use pre-device interrupt remapping mode per default. Fix removing old
+    remappings.
+    CVE-2013-0153
+
+ -- Bastian Blank <waldi@debian.org>  Wed, 06 Feb 2013 13:04:52 +0100
+
+xen (4.1.4-1) unstable; urgency=low
+
+  * New upstream release.
+    - Disable process-context identifier support in newer CPUs for all
+      domains.
+    - Add workarounds for AMD errata.
+    - Don't allow any non-canonical addresses.
+    - Use Multiboot memory map if BIOS emulation does not provide one.
+    - Fix several problems in tmem.
+      CVE-2012-3497
+    - Fix error handling in domain creation.
+    - Adjust locking and interrupt handling during S3 resume.
+    - Tighten more resource and memory range checks.
+    - Reset performance counters. (closes: #698651)
+    - Remove special-case for first IO-APIC.
+    - Fix MSI handling for HVM domains. (closes: #695123)
+    - Revert cache value of disks in HVM domains.
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 31 Jan 2013 15:44:50 +0100
+
+xen (4.1.3-8) unstable; urgency=high
+
+  * Fix error in VT-d interrupt remapping source validation.
+    CVE-2012-5634
+  * Fix buffer overflow in qemu e1000 emulation.
+    CVE-2012-6075
+  * Update patch, mention second CVE.
+    CVE-2012-5511, CVE-2012-6333
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 19 Jan 2013 13:55:07 +0100
+
+xen (4.1.3-7) unstable; urgency=low
+
+  * Fix clock jump due to incorrect annotated inline assembler.
+    (closes: #599161)
+  * Add support for XZ compressed Linux kernels to hypervisor and userspace
+    based loaders, it is needed for any Linux kernels newer then Wheezy.
+    (closes: #695056)
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 11 Dec 2012 18:54:59 +0100
+
+xen (4.1.3-6) unstable; urgency=high
+
+  * Fix error handling in physical to machine memory mapping.
+    CVE-2012-5514
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 04 Dec 2012 10:51:43 +0100
+
+xen (4.1.3-5) unstable; urgency=high
+
+  * Fix state corruption due to incomplete grant table switch.
+    CVE-2012-5510
+  * Check range of arguments to several HVM operations.
+    CVE-2012-5511, CVE-2012-6333
+  * Check array index before using it in HVM memory operation.
+    CVE-2012-5512
+  * Check memory range in memory exchange operation.
+    CVE-2012-5513
+  * Don't allow too large memory size and avoid busy looping.
+    CVE-2012-5515
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 03 Dec 2012 19:37:38 +0100
+
+xen (4.1.3-4) unstable; urgency=high
+
+  * Use linux 3.2.0-4 stuff.
+  * Fix overflow in timer calculations.
+    CVE-2012-4535
+  * Check value of physical interrupts parameter before using it.
+    CVE-2012-4536
+  * Error out on incorrect memory mapping updates.
+    CVE-2012-4537
+  * Check if toplevel page tables are present.
+    CVE-2012-4538
+  * Fix infinite loop in compatibility code.
+    CVE-2012-4539
+  * Limit maximum kernel and ramdisk size.
+    CVE-2012-2625, CVE-2012-4544
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 20 Nov 2012 15:51:01 +0100
+
+xen (4.1.3-3) unstable; urgency=low
+
+  * Xen domain init script:
+    - Make sure Open vSwitch is started before any domain.
+    - Properly handle and show output of failed migration and save.
+    - Ask all domains to shut down before checking them.
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 18 Sep 2012 13:26:32 +0200
+
+xen (4.1.3-2) unstable; urgency=medium
+
+  * Don't allow writing reserved bits in debug register.
+    CVE-2012-3494
+  * Fix error handling in interrupt assignment.
+    CVE-2012-3495
+  * Don't trigger bug messages on invalid flags.
+    CVE-2012-3496
+  * Check array bounds in interrupt assignment.
+    CVE-2012-3498
+  * Properly check bounds while setting the cursor in qemu.
+    CVE-2012-3515
+  * Disable monitor in qemu by default.
+    CVE-2012-4411
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 07 Sep 2012 19:41:46 +0200
+
+xen (4.1.3-1) unstable; urgency=medium
+
+  * New upstream release: (closes: #683286)
+    - Don't leave the x86 emulation in a bad state. (closes: #683279)
+      CVE-2012-3432
+    - Only check for shared pages while any exist on teardown.
+      CVE-2012-3433
+    - Fix error handling for unexpected conditions.
+    - Update CPUID masking to latest Intel spec.
+    - Allow large ACPI ids.
+    - Fix IOMMU support for PCI-to-PCIe bridges.
+    - Disallow access to some sensitive IO-ports.
+    - Fix wrong address in IOTLB.
+    - Fix deadlock on CPUs without working cpufreq driver.
+    - Use uncached disk access in qemu.
+    - Fix buffer size on emulated e1000 device in qemu.
+  * Fixup broken and remove applied patches.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 17 Aug 2012 11:25:02 +0200
+
+xen (4.1.3~rc1+hg-20120614.a9c0a89c08f2-5) unstable; urgency=low
+
+  [ Ian Campbell ]
+  * Set tap device MAC addresses to fe:ff:ff:ff:ff:ff (Closes: #671018)
+  * Only run xendomains initscript if toolstack is xl or xm (Closes: #680528)
+
+  [ Bastian Blank ]
+  * Actually build-depend on new enough version of dpkg-dev.
+  * Add xen-sytem-* meta-packages. We are finally in a position to do
+    automatic upgrades and this package is missing. (closes: #681376)
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 28 Jul 2012 10:23:26 +0200
+
+xen (4.1.3~rc1+hg-20120614.a9c0a89c08f2-4) unstable; urgency=low
+
+  * Add Build-Using info to xen-utils package.
+  * Fix build-arch target.
+
+ -- Bastian Blank <waldi@debian.org>  Sun, 01 Jul 2012 19:52:30 +0200
+
+xen (4.1.3~rc1+hg-20120614.a9c0a89c08f2-3) unstable; urgency=low
+
+  * Remove /usr/lib/xen-default. It breaks systems if xenstored is not
+    compatible.
+  * Fix init script usage.
+  * Fix udev rules for emulated network devices:
+    - Force names of emulated network devices to a predictable name.
+
+ -- Bastian Blank <waldi@debian.org>  Sun, 01 Jul 2012 16:59:04 +0200
+
+xen (4.1.3~rc1+hg-20120614.a9c0a89c08f2-2) unstable; urgency=low
+
+  * Fix pointer missmatch in interrupt functions. Fixes build on i386.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 15 Jun 2012 18:00:51 +0200
+
+xen (4.1.3~rc1+hg-20120614.a9c0a89c08f2-1) unstable; urgency=low
+
+  * New upstream snapshot.
+    - Fix privilege escalation and syscall/sysenter DoS while using
+      non-canonical addresses by untrusted PV guests. (closes: #677221)
+      CVE-2012-0217
+      CVE-2012-0218
+    - Disable Xen on CPUs affected by AMD Erratum #121. PV guests can
+      cause a DoS of the host.
+      CVE-2012-2934
+  * Don't fail if standard toolstacks are not available. (closes: #677244)
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 14 Jun 2012 17:06:25 +0200
+
+xen (4.1.2-7) unstable; urgency=low
+
+  * Really use ucf.
+  * Update init script dependencies:
+    - Start $syslog before xen.
+    - Start drbd and iscsi before xendomains. (closes: #626356)
+    - Start corosync and heartbeat after xendomains.
+  * Remove /var/log/xen on purge. (closes: #656216)
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 22 May 2012 10:44:41 +0200
+
+xen (4.1.2-6) unstable; urgency=low
+
+  * Fix generation of architectures for hypervisor packages.
+  * Remove information about loop devices, it is incorrect. (closes: #503044)
+  * Update xendomains init script:
+    - Create directory for domain images only root readable. (closes: #596048)
+    - Add missing sanity checks for variables. (closes: #671750)
+    - Remove not longer supported config options.
+    - Don't fail if no config is available.
+    - Remove extra output if domain was restored.
+
+ -- Bastian Blank <waldi@debian.org>  Sun, 06 May 2012 20:07:41 +0200
+
+xen (4.1.2-5) unstable; urgency=low
+
+  * Actually force init script rename. (closes: #669341)
+  * Fix long output from xl.
+  * Move complete init script setup.
+  * Rewrite xendomains init script:
+    - Use LSB output functions.
+    - Make output more clear.
+    - Use xen toolstack wrapper.
+    - Use a python script to properly read domain details.
+  * Set name for Domain-0.
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 23 Apr 2012 11:56:45 +0200
+
+xen (4.1.2-4) unstable; urgency=low
+
+  [ Bastian Blank ]
+  * Build-depend on ipxe-qemu instead of ipxe. (closes: #665070)
+  * Don't longer use a4wide latex package.
+  * Use ucf for /etc/default/xen.
+  * Remove handling for old udev rules link and xenstored directory.
+  * Rename xend init script to xen.
+
+  [ Lionel Elie Mamane ]
+  * Fix toolstack script to work with old dash. (closes: #648029)
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 16 Apr 2012 08:47:29 +0000
+
+xen (4.1.2-3) unstable; urgency=low
+
+  * Merge xen-common source package.
+  * Remove xend wrapper, it should not be called by users.
+  * Support xl in init script.
+  * Restart xen daemons on upgrade.
+  * Restart and stop xenconsoled in init script.
+  * Load xen-gntdev module.
+  * Create /var/lib/xen. (closes: #658101)
+  * Cleanup udev rules. (closes: #657745)
+
+ -- Bastian Blank <waldi@debian.org>  Wed, 01 Feb 2012 19:28:28 +0100
+
+xen (4.1.2-2) unstable; urgency=low
+
+  [ Jon Ludlam ]
+  * Import (partially reworked) upstream changes for OCaml support.
+    - Rename the ocamlfind packages.
+    - Remove uuid and log libraries.
+    - Fix 2 bit-twiddling bugs and an off-by-one
+  * Fix build of OCaml libraries.
+  * Add OCaml library and development package.
+  * Include some missing headers.
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 10 Dec 2011 19:13:25 +0000
+
+xen (4.1.2-1) unstable; urgency=low
+
+  * New upstream release.
+  * Build-depend on pkg-config.
+  * Add package libxen-4.1. Includes some shared libs.
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 26 Nov 2011 18:28:06 +0100
+
+xen (4.1.1-3) unstable; urgency=low
+
+  [ Julien Danjou ]
+  * Remove Julien Danjou from the Uploaders field. (closes: #590439)
+
+  [ Bastian Blank ]
+  * Use current version of python. (closes: #646660)
+  * Build-depend against liblzma-dev, it is used if available.
+    (closes: #646694)
+  * Update Standards-Version to 3.9.2. No changes.
+  * Don't use brace-expansion in debhelper install files.
+
+ -- Bastian Blank <waldi@debian.org>  Wed, 26 Oct 2011 14:42:33 +0200
+
+xen (4.1.1-2) unstable; urgency=low
+
+  * Fix hvmloader with gcc 4.6.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 05 Aug 2011 23:58:36 +0200
+
+xen (4.1.1-1) unstable; urgency=low
+
+  * New upstream release.
+  * Don't use qemu-dm if it is not needed. (Backport from xen-unstable.)
+  * Use dh_python2.
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 18 Jul 2011 19:38:38 +0200
+
+xen (4.1.0-3) unstable; urgency=low
+
+  * Add ghostscript to build-deps.
+  * Enable qemu-dm build.
+    - Add qemu as another orig tar.
+    - Remove blktap1, bluetooth and sdl support from qemu.
+    - Recommend qemu-keymaps and qemu-utils.
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 28 Apr 2011 15:20:45 +0200
+
+xen (4.1.0-2) unstable; urgency=low
+
+  * Re-enable hvmloader:
+    - Use packaged ipxe.
+  * Workaround incompatibility with xenstored of Xen 4.0.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 15 Apr 2011 11:38:25 +0200
+
+xen (4.1.0-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Bastian Blank <waldi@debian.org>  Sun, 27 Mar 2011 18:09:28 +0000
+
+xen (4.1.0~rc6-1) unstable; urgency=low
+
+  * New upstream release candidate.
+  * Build documentation using pdflatex.
+  * Use python 2.6. (closes: #596545)
+  * Fix lintian override.
+  * Install new tools: xl, xenpaging.
+  * Enable blktap2.
+    - Use own md5 implementation.
+    - Fix includes.
+    - Fix linking of blktap2 binaries.
+    - Remove optimization setting.
+  * Temporarily disable hvmloader, wants to download ipxe.
+  * Remove xenstored pid check from xl.
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 17 Mar 2011 16:12:45 +0100
+
+xen (4.0.1-2) unstable; urgency=low
+
+  * Fix races in memory management.
+  * Make sure that frame-table compression leaves enough alligned.
+  * Disable XSAVE support. (closes: #595490)
+  * Check for dying domain instead of raising an assertion.
+  * Add C6 state with EOI errata for Intel.
+  * Make some memory management interrupt safe. Unsure if really needed.
+  * Raise bar for inter-socket migrations on mostly-idle systems.
+  * Fix interrupt handling for legacy routed interrupts.
+  * Allow to set maximal domain memory even during a running change.
+  * Support new partition name in pygrub. (closes: #599243)
+  * Fix some comparisions "< 0" that may be optimized away.
+  * Check for MWAIT support before using it.
+  * Fix endless loop on interrupts on Nehalem cpus.
+  * Don't crash upon direct GDT/LDT access. (closes: #609531)
+    CVE-2010-4255  
+  * Don't loose timer ticks after domain restore.
+  * Reserve some space for IOMMU area in dom0. (closes: #608715)
+  * Fix hypercall arguments after trace callout.
+  * Fix some error paths in vtd support. Memory leak.
+  * Reinstate ACPI DMAR table.
+
+ -- Bastian Blank <waldi@debian.org>  Wed, 12 Jan 2011 15:01:40 +0100
+
+xen (4.0.1-1) unstable; urgency=low
+
+  * New upstream release.
+    - Fix IOAPIC S3 with interrupt remapping enabled.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 03 Sep 2010 17:14:28 +0200
+
+xen (4.0.1~rc6-1) unstable; urgency=low
+
+  * New upstream release candidate.
+    - Add some missing locks for page table walk.
+    - Fix NMU injection into guest.
+    - Fix ioapic updates for vt-d.
+    - Add check for GRUB2 commandline behaviour.
+    - Fix handling of invalid kernel images.
+    - Allow usage of powernow.
+  * Remove lowlevel python modules usage from pygrub. (closes: #588811)
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 17 Aug 2010 23:15:34 +0200
+
+xen (4.0.1~rc5-1) unstable; urgency=low
+
+  * New upstream release candidate.
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 02 Aug 2010 17:06:27 +0200
+
+xen (4.0.1~rc3-1) unstable; urgency=low
+
+  * New upstream release candidate.
+  * Call dh_pyversion with the correct version.
+  * Restart xen daemon on upgrade.
+
+ -- Bastian Blank <waldi@debian.org>  Wed, 30 Jun 2010 16:30:47 +0200
+
+xen (4.0.0-2) unstable; urgency=low
+
+  * Fix python dependency. (closes: #586666)
+    - Use python-support.
+    - Hardcode to use python 2.5 for now.
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 21 Jun 2010 17:23:16 +0200
+
+xen (4.0.0-1) unstable; urgency=low
+
+  * Update to unstable.
+  * Fix spelling in README.
+  * Remove unnecessary build-depends.
+  * Fixup xend to use different filename lookup.
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 17 Jun 2010 11:16:55 +0200
+
+xen (4.0.0-1~experimental.2) experimental; urgency=low
+
+  * Merge changes from 3.4.3-1.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 28 May 2010 12:58:12 +0200
+
+xen (4.0.0-1~experimental.1) experimental; urgency=low
+
+  * New upstream version.
+  * Rename source package to xen.
+  * Build depend against iasl and uuid-dev.
+  * Disable blktap2 support, it links against OpenSSL.
+  * Update copyright file.
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 06 May 2010 15:47:38 +0200
+
+xen-3 (3.4.3-1) unstable; urgency=low
+
+  * New upstream version.
+  * Disable blktap support, it is unusable with current kernels.
+  * Disable libaio, was only used by blktap.
+  * Drop device creation support. (closes: #583283)
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 28 May 2010 11:43:18 +0200
+
+xen-3 (3.4.3~rc6-1) unstable; urgency=low
+
+  * New upstream release candidate.
+    - Relocate multiboot modules. (closes: #580045)
+    - Support grub2 in pygrub. (closes: #573311)
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 08 May 2010 11:32:29 +0200
+
+xen-3 (3.4.3~rc3-2) unstable; urgency=low
+
+  * Again list the complete version in the hypervisor.
+  * Fix path detection for bootloader, document it. (closes: #481105)
+  * Rewrite README.
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 08 Apr 2010 16:14:58 +0200
+
+xen-3 (3.4.3~rc3-1) unstable; urgency=low
+
+  * New upstream release candidate.
+  * Use 3.0 (quilt) source format.
+  * Always use current python version.
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 01 Mar 2010 22:14:22 +0100
+
+xen-3 (3.4.2-2) unstable; urgency=low
+
+  * Remove Jeremy T. Bouse from uploaders.
+  * Export blktap lib and headers.
+  * Build amd64 hypervisor on i386. (closes: #366315)
+
+ -- Bastian Blank <waldi@debian.org>  Sun, 22 Nov 2009 16:54:47 +0100
+
+xen-3 (3.4.2-1) unstable; urgency=low
+
+  * New upstream version.
+  * Strip hvmloader by hand.
+  * Remove extra license file from libxen-dev.
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 16 Nov 2009 20:57:07 +0100
+
+xen-3 (3.4.1-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 21 Aug 2009 21:34:38 +0200
+
+xen-3 (3.4.0-2) unstable; urgency=low
+
+  * Add symbols file for libxenstore3.0. (closes: #536173)
+  * Document that ioemu is currently unsupported. (closes: #536175)
+  * Fix location of fsimage plugins. (closes: #536174)
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 18 Jul 2009 18:05:35 +0200
+
+xen-3 (3.4.0-1) unstable; urgency=low
+
+  [ Bastian Blank ]
+  * New upstream version.
+  * Remove ioemu for now. (closes: #490409, #496367)
+  * Remove non-pae hypervisor.
+  * Use debhelper compat level 7.
+  * Make the init script start all daemons.
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 30 Jun 2009 22:33:22 +0200
+
+xen-3 (3.2.1-2) unstable; urgency=low
+
+  * Use e2fslibs based ext2 support for pygrub. (closes: #476366)
+  * Fix missing checks in pvfb code.
+    See CVE-2008-1952. (closes: #487095)
+  * Add support for loading bzImage files. (closes: #474509)
+  * Enable TLS support in ioemu code.
+  * Drop libcrypto usage because of GPL-incompatibility.
+  * Remove AES code from blktap drivers. Considered broken.
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 28 Jun 2008 11:30:43 +0200
+
+xen-3 (3.2.1-1) unstable; urgency=low
+
+  * New upstream version.
+  * Set rpath relative to ${ORIGIN}.
+  * Add lintian override to xen-utils package.
+
+ -- Bastian Blank <waldi@debian.org>  Thu, 22 May 2008 14:01:47 +0200
+
+xen-3 (3.2.0-5) unstable; urgency=low
+
+  * Provide correct directory to dh_pycentral.
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 14 Apr 2008 21:43:49 +0200
+
+xen-3 (3.2.0-4) unstable; urgency=low
+
+  * Pull in newer xen-utils-common.
+  * Fix missing size checks in the ioemu block driver. (closes: #469654)
+    See: CVE-2008-0928
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 07 Mar 2008 14:21:38 +0100
+
+xen-3 (3.2.0-3) unstable; urgency=low
+
+  * Clean environment for build.
+  * Add packages libxenstore3.0 and xenstore-utils.
+  * Move docs package in docs section to match overwrites.
+  * Make the hypervisor only recommend the utils.
+  * Cleanup installation. (closes: #462989)
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 12 Feb 2008 12:40:56 +0000
+
+xen-3 (3.2.0-2) unstable; urgency=low
+
+  * Fix broken patch. (closes: #462522)
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 26 Jan 2008 17:21:52 +0000
+
+xen-3 (3.2.0-1) unstable; urgency=low
+
+  * New upstream version.
+  * Add package libxen-dev. Including public headers and static libs.
+    (closes: #402249)
+  * Don't longer install xenfb, removed upstream.
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 22 Jan 2008 12:51:49 +0000
+
+xen-3 (3.1.2-2) unstable; urgency=low
+
+  * Add missing rpath definitions.
+  * Fix building of pae version.
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 08 Dec 2007 12:07:42 +0000
+
+xen-3 (3.1.2-1) unstable; urgency=high
+
+  * New upstream release:
+    - Move shared file into /var/run. (closes: #447795)
+      See CVE-2007-3919.
+    - x86: Fix various problems with debug-register handling. (closes: #451626)
+      See CVE-2007-5906.
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 24 Nov 2007 13:24:45 +0000
+
+xen-3 (3.1.1-1) unstable; urgency=low
+
+  * New upstream release:
+    - Don't use exec with untrusted values in pygrub. (closes: #444430)
+      See CVE-2007-4993.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 19 Oct 2007 16:02:37 +0000
+
+xen-3 (3.1.0-2) unstable; urgency=low
+
+  * Switch to texlive for documentation.
+  * Drop unused transfig.
+  * Drop unused latex features from documentation.
+  * Build depend against gcc-multilib for amd64. (closes: #439662)
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 31 Aug 2007 08:15:50 +0000
+
+xen-3 (3.1.0-1) unstable; urgency=low
+
+  [ Julien Danjou ]
+  * New upstream version.
+
+  [ Ralph Passgang ]
+  * Added graphviz to Build-Indeps
+
+  [ Bastian Blank ]
+  * Upstream removed one part of the version. Do it also.
+  * Merge utils packages.
+  * Install blktap support.
+  * Install pygrub.
+  * Install xenfb tools.
+  * xenconsoled startup is racy, wait a little bit.
+
+ -- Bastian Blank <waldi@debian.org>  Mon, 20 Aug 2007 15:05:08 +0000
+
+xen-3.0 (3.0.4-1-1) unstable; urgency=low
+
+  [ Bastian Blank ]
+  * New upstream version (closes: #394411)
+
+  [ Guido Trotter ]
+  * Actually try to build and release xen 3.0.4
+  * Update build dependencies
+
+ -- Guido Trotter <ultrotter@debian.org>  Wed, 23 May 2007 11:57:29 +0100
+
+xen-3.0 (3.0.3-0-2) unstable; urgency=medium
+
+  [Bastian Blank]
+  * Remove device recreate code.
+  * Remove build dependency on linux-support-X
+
+  [ Guido Trotter ]
+  * Add missing build dependency on zlib1g-dev (closes: #396557)
+  * Add missing build dependencies on libncurses5-dev and x11proto-core-dev
+    (closes: #396561, #396567)
+
+ -- Guido Trotter <ultrotter@debian.org>  Thu,  2 Nov 2006 16:38:02 +0000
+
+xen-3.0 (3.0.3-0-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Bastian Blank <waldi@debian.org>  Fri, 20 Oct 2006 11:04:35 +0000
+
+xen-3.0 (3.0.3~rc4+hg11760-1) unstable; urgency=low
+
+  * New upstream snapshot.
+  * Ignore update-grub errors. (closes: #392534)
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 14 Oct 2006 13:09:53 +0000
+
+xen-3.0 (3.0.3~rc1+hg11686-1) unstable; urgency=low
+
+  * New upstream snapshot.
+  * Rename ioemu package to include the complete version.
+  * Fix name of hypervisor. (closes: #391771)
+
+ -- Bastian Blank <waldi@debian.org>  Mon,  9 Oct 2006 12:48:13 +0000
+
+xen-3.0 (3.0.2-3+hg9762-1) unstable; urgency=low
+
+  * New upstream snapshot.
+  * Rename hypervisor and utils packages to include the complete version.
+  * Redo build environment.
+
+ -- Bastian Blank <waldi@debian.org>  Mon,  4 Sep 2006 18:43:12 +0000
+
+xen-3.0 (3.0.2+hg9697-2) unstable; urgency=low
+
+  [ Guido Trotter ]
+  * Update xen-utils' README.Debian (closes: #372524)
+
+  [ Bastian Blank ]
+  * Adopt new python policy. (closes: #380990)
+  * Add patch to make new kernels working on the hypervisor.
+
+ -- Bastian Blank <waldi@debian.org>  Tue, 15 Aug 2006 19:20:08 +0000
+
+xen-3.0 (3.0.2+hg9697-1) unstable; urgency=low
+
+  [ Guido Trotter ]
+  * Update Standards Version
+  * Merge upstream fixes trunk (upstream 3.0.2-3 + a couple of fixes)
+
+  [ Bastian Blank ]
+  * Add xen-ioemu-3.0 package to support HVM guests (closes: #368496)
+
+ -- Guido Trotter <ultrotter@debian.org>  Wed, 31 May 2006 10:50:05 +0200
+
+xen-3.0 (3.0.2+hg9681-1) unstable; urgency=low
+
+  * Update xen-hypervisor-3.0-i386 and xen-hypervisor-3.0-i386-pae
+    descriptions, specifying what the difference between the two packages is
+    (closes: #366019)
+  * Merge upstream fixes trunk
+
+ -- Guido Trotter <ultrotter@debian.org>  Thu, 18 May 2006 15:25:02 +0200
+
+xen-3.0 (3.0.2+hg9656-1) unstable; urgency=low
+
+  * Merge upstream fixes trunk
+    - This includes a fix for CVE-2006-1056
+
+ -- Guido Trotter <ultrotter@debian.org>  Thu, 27 Apr 2006 17:34:03 +0200
+
+xen-3.0 (3.0.2+hg9651-1) unstable; urgency=low
+
+  * Merge upstream fixes trunk
+  * Fix PAE disabled in pae build (Closes: #364875) 
+
+ -- Julien Danjou <acid@debian.org>  Wed, 26 Apr 2006 13:19:39 +0200
+
+xen-3.0 (3.0.2+hg9646-1) unstable; urgency=low
+
+  [ Guido Trotter ]
+  * Merge upstream fixes trunk
+
+  [ Bastian Blank ]
+  * debian/patches/libdir.dpatch: Update to make xm save work
+
+ -- Julien Danjou <acid@debian.org>  Mon, 24 Apr 2006 18:02:07 +0200
+
+xen-3.0 (3.0.2+hg9611-1) unstable; urgency=low
+
+  * Merge upstream bug fixes
+  * Fix bug with xend init.d script
+
+ -- Julien Danjou <acid@debian.org>  Wed, 12 Apr 2006 17:35:35 +0200
+
+xen-3.0 (3.0.2+hg9598-1) unstable; urgency=low
+
+  * New upstream release
+  * Fix copyright file
+
+ -- Julien Danjou <acid@debian.org>  Mon, 10 Apr 2006 17:02:55 +0200
+
+xen-3.0 (3.0.1+hg8762-1) unstable; urgency=low
+
+  * The "preserve our homes" release
+  * Now cooperatively maintained by the Debian Xen Team
+  * New upstream release (closes: #327493, #342249)
+  * Build depend on transfig (closes: #321157)
+  * Use gcc rather than gcc-3.4 to compile (closes: #323698)
+  * Split xen-hypervisor-3.0 and xen-utils-3.0
+  * Build both normal and pae hypervisor packages
+  * Change maintainer and add uploaders field
+  * Add force-reload support for init script xendomains
+  * Remove dependency against bash
+  * Bump standards version to 3.6.2.2
+  * xen-utils-3.0 conflicts and replaces xen
+  * Add dpatch structure to the package
+  * Remove build-dependency on gcc (it's build essential anyway)
+  * Make SrvServer.py not executable
+  * Create NEWS.Debian file with important upgrade notices
+  * Update copyright file
+  * Remove the linux-patch-xen package
+  * Removed useless build-dependencies: libncurses5-dev, wget
+  * Changed xendomains config path to /etc/default
+  * xen-utils-3.0 now provides xen-utils and xen-hypervisor-3.0-i386 &
+    xen-hypervisor-3.0-i386-pae & xen-hypervizor-amd64 now provide
+    xen-hypervisor
+  * Made xen-utils-3.0.postinst more fault-tolerant, so that upgrading
+    xen2 -> xen3 don't fail because of a running xen2 hypervisor
+  * Updated the "Replaces & Conflicts"
+  * Install only and correctly udev files
+  * Compile date is no more in current locale
+  * Add patch which add the debian version and maintainer in the version
+    string and removes the banner.
+  * Don't install unusable cruft in xen-utils
+  * Remove libxen packages (no stable API/ABI)
+
+ -- Julien Danjou <acid@debian.org>  Wed,  5 Apr 2006 16:05:07 +0200
+
+xen (2.0.6-1) unstable; urgency=low
+
+  * Patches applied upstream: non-xen-init-exit.patch, add-build.patch,
+    python-install.patch, disable-html-docs.patch.
+  * New upstream released.  Closes: #311336.
+  * Remove comparison to UML from xen short description.  Closes: #317066.
+  * Make packages conflicts with 1.2 doc debs.  Closes: #304285.
+  * Add iproute to xen depends, as it uses /bin/ip.  Closes: #300488,
+    #317468.
+
+ -- Adam Heath <doogie@brainfood.com>  Wed, 06 Jul 2005 12:35:50 -0500
+
+xen (2.0.5-3) experimental; urgency=low
+
+  * Change priority/section to match the overrides file.
+
+ -- Adam Heath <doogie@brainfood.com>  Fri, 18 Mar 2005 12:43:50 -0600
+
+xen (2.0.5-2) experimental; urgency=low
+
+  * Mike McCallister <mike+debian@metalogue.com>,
+    Tommi Virtanen <tv@debian.org>, Tom Hibbert <tom@nsp.co.nz>:
+    Fix missing '.' in update-rc.d call in xen.postinst.  Closes: #299384
+
+ -- Adam Heath <doogie@brainfood.com>  Fri, 18 Mar 2005 11:39:56 -0600
+
+xen (2.0.5-1) experimental; urgency=low
+
+  * New upstream.
+  * Remove pic-lib.patch, tools-misc-TARGETS.patch, and clean-mttr.patch
+    as they have been applied upstream(in various forms).
+  * xend now starts at priority 20, stops at 21, while xendomains starts
+    at 21, and stops at 20.
+
+ -- Adam Heath <doogie@brainfood.com>  Fri, 11 Mar 2005 14:33:33 -0600
+
+xen (2.0.4-4) experimental; urgency=low
+
+  * Bah, major booboo.  Add /boot to debian/xen.install, so xen.gz will
+    get shipped.  Reported by Clint Adams <schizo@debian.org>.
+
+ -- Adam Heath <doogie@brainfood.com>  Tue, 15 Feb 2005 13:00:57 -0600
+
+xen (2.0.4-3) experimental; urgency=low
+
+  * Fix file overlap(/usr/share/doc/xen/examples/*) between xen and
+    xen-docs.  Reported by Tupshin Harper <tupshin@tupshin.com>.
+
+ -- Adam Heath <doogie@brainfood.com>  Sun, 06 Feb 2005 01:22:45 -0600
+
+xen (2.0.4-2) experimental; urgency=low
+
+  * Fix kernel patch generation.  It was broken when I integrated with
+    debian's kernel source.  I used a symlink, and diff doesn't follow
+    those.
+
+ -- Adam Heath <doogie@brainfood.com>  Sat, 05 Feb 2005 18:16:35 -0600
+
+xen (2.0.4-1) experimental; urgency=low
+
+  * New upstream.
+  * xen.deb can now install on a plain kernel; that is, the init scripts
+    exit successfully if /proc/xen/privcmd doesn't exist.  This allows
+    for dual-boot setups.
+  * Manpages do not yet exist xend, xenperf, xensv, xfrd, nor xm.  xend
+    xfrd are daemons, and take little if any options.  I've not had a need
+    to use xenperf nor xensv yet.  xm has nice built in help(xm help).
+  * Upstream now requires either linux 2.4.29, or 2.6.10.  Since 2.4.29 is
+    not yet in debian, disable the 2.4 patch generation.  Closes: #271245.
+  * Not certain how the kernel-patch-xen was empty.  It's not now, with
+    the repackaging.  Closes: #272299.
+  * Xen no longer produces kernel images, so problems about missing features
+    are no longer valid.  Closes: #253924.
+  * Acknowledge nmu bugs:
+    * No longer build-depend on gcc 3.3, as the default gcc works. Closes:
+      #243048.
+
+ -- Adam Heath <doogie@brainfood.com>  Sat, 05 Feb 2005 18:04:27 -0600
+
+xen (2.0.3-0.1) unstable; urgency=low
+
+  * Changes from Tommi Virtanen:
+    * Added dh-kpatches and libcurl3-dev to Build-Depends.
+    * Add /etc/xen/sv/params.py and /etc/xen/xend/params.py.
+    * Add xmexample1 and xmexample2 to xen/doc/examples.
+
+ -- Adam Heath <doogie@brainfood.com>  Wed, 26 Jan 2005 10:55:07 -0600
+
+xen (2.0.3-0) unstable; urgency=low
+
+  * New upstream.  Closes: #280733.
+  * Repackaged from scratch.
+  * Using unreleased patch management system.  See debian/README.build.
+    * After extracting the .dsc, there are no special steps needed
+    * Those wanting to change the source, use the normal procedures for
+      any package, including using interdiff(or other tool) to send a
+      patch to me or the bts.
+  * No longer try to do anything fancy with regard to the layout of the
+    built kernels.  Now, only patches are distributed.  Please make use of
+    the xen support in kernel-package.
+  * Early preview release to #debian-devel.
+
+ -- Adam Heath <doogie@brainfood.com>  Tue, 25 Jan 2005 13:24:54 -0600
+
+xen (1.2-4.1) unstable; urgency=high
+
+  * NMU
+  * Remove gcc-3.2 from Build-Depends as isn't used during build
+    (Closes: #243048)
+
+ -- Frank Lichtenheld <djpig@debian.org>  Sat, 21 Aug 2004 17:42:28 +0200
+
+xen (1.2-4) unstable; urgency=low
+
+  * Added xen-docs.README.Debian, which explains the kernel image layout,
+    and contains references on the locations differ from what is mentioned
+    by the upstream documentation.  Closes: #230345.
+
+ -- Adam Heath <doogie@brainfood.com>  Fri, 26 Mar 2004 17:36:41 -0600
+
+xen (1.2-3) unstable; urgency=low
+
+  * Add kernel-source-2.4.25 and kernel-patch-debian-2.4.25 to
+    Build-Depends-Indep.
+
+ -- Adam Heath <doogie@brainfood.com>  Tue, 23 Mar 2004 20:14:39 -0600
+
+xen (1.2-2) unstable; urgency=low
+
+  * xen: moved /boot/xen.gz to /usr/lib/kernels/xen-i386/images/vmlinuz
+  * kernel-image, kernel-modules: swapped i386/xeno to xeno/i386 in
+    /usr/lib/kernels.
+  * Add kernel-patch-nfs-swap deb.
+  * Apply additional patches to kernel-image-xen:
+    * nfs-group
+    * nfs-swap
+
+ -- Adam Heath <doogie@brainfood.com>  Thu, 04 Mar 2004 12:47:47 -0600
+
+xen (1.2-1) unstable; urgency=low
+
+  * Initial version.
+
+ -- Adam Heath <doogie@brainfood.com>  Tue, 02 Mar 2004 13:21:52 -0600
diff --git a/compat b/compat
new file mode 100644 (file)
index 0000000..ec63514
--- /dev/null
+++ b/compat
@@ -0,0 +1 @@
+9
diff --git a/control b/control
new file mode 100644 (file)
index 0000000..64a87dd
--- /dev/null
+++ b/control
@@ -0,0 +1,167 @@
+Source: xen
+Section: kernel
+Priority: optional
+Maintainer: Debian Xen Team <pkg-xen-devel@lists.alioth.debian.org>
+Uploaders: Guido Trotter <ultrotter@debian.org>, Bastian Blank <waldi@debian.org>, Ian Jackson <ian.jackson@eu.citrix.com>
+Standards-Version: 3.9.4
+Build-Depends: autotools-dev, debhelper (>> 9), dpkg-dev (>= 1.16.0~), lsb-release, python-dev, bcc [i386 amd64], gcc-multilib [i386 amd64], e2fslibs-dev, iasl, seabios (>= 1.7.4-2~) [i386 amd64], libaio-dev, libfdt-dev [armhf arm64], libglib2.0-dev, liblzma-dev, libncurses5-dev, libpixman-1-dev, libyajl-dev, pkg-config, uuid-dev, zlib1g-dev
+XS-Python-Version: current
+
+Package: libxen-4.11
+Architecture: amd64 arm64 armhf i386
+Section: libs
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: Public libs for Xen
+ This package contains the shared toolstack libraries for Xen.
+Multi-Arch: same
+
+Package: libxenstore3.0
+Architecture: amd64 arm64 armhf i386
+Section: libs
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: Xenstore communications library for Xen
+ This package contains the client library interface to XenStore.
+Multi-Arch: same
+
+Package: libxen-dev
+Architecture: amd64 arm64 armhf i386
+Section: libdevel
+Depends: libxen-4.11 (= ${binary:Version}), libxenstore3.0 (= ${binary:Version}), ${misc:Depends}
+Description: Public headers and libs for Xen
+ This package contains the public headers and static libraries for Xen.
+ .
+ The libxenlight library is intended as a common base for all Xen toolstack
+ developers.  The libxlutil library contains additional helpers which may
+ be useful to toolstack developers.
+ .
+ The libxenstore library allows userspace processes to interact with the
+ XenStore database.  XenStore is a shared database used for interdomain
+ communication of configuration and status information.  It is accessible
+ to all domains running on the same Xen host.  See
+ http://wiki.xen.org/wiki/XenStore for more information.
+ .
+ The libxenctrl, libxenguest and other remaining included libraries are
+ internal libraries intended for use by the Xen toolstack and are not
+ intended to be used directly.  Toolstack authors should use libxenlight.
+Multi-Arch: same
+
+Package: xenstore-utils
+Architecture: amd64 arm64 armhf i386
+Section: admin
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Replaces: xen-utils-common (<= 3.1.0-1)
+Conflicts: xen-utils-common (<= 3.1.0-1)
+Description: Xenstore command line utilities for Xen
+ This package contains command line utilities for interacting with
+ XenStore.
+ .
+ XenStore is a shared database used for interdomain communication of
+ configuration and status information.  It is accessible to all domains
+ running on the same Xen host.  See http://wiki.xen.org/wiki/XenStore for
+ more information.
+ .
+ In the common case these tools are used by the Xen toolstack running in
+ domain0 (or a driver domain) however they may also be used in a guest
+ domain to support local scripting which wants to communicate via XenStore.
+
+Package: xen-utils-common
+Architecture: all
+Depends: lsb-base, python, udev, xenstore-utils, ${misc:Depends}
+Description: Xen administrative tools - common files
+ The userspace tools to manage a system virtualized through the Xen virtual
+ machine monitor.
+ .
+ This package is only required on the host system (Domain 0) and not on the
+ virtual guest systems (Domain U).
+
+Package: xen-hypervisor-common
+Architecture: all
+Depends: ${misc:Depends}
+Replaces: xen-hypervisor-4.8-amd64, xen-hypervisor-4.8-arm64, xen-hypervisor-4.8-armhf
+Description: Xen Hypervisor - common files
+ The configuration which arranges for an installed hypervisor to be booted
+ as default, with the right command line arguments passed to both
+ hypervisor and host (Domain 0) kernel.
+ .
+ This package is only required on the host system (Domain 0) and not on the
+ virtual guest systems (Domain U).
+
+Package: xen-utils-4.11
+Architecture: amd64 arm64 armhf i386
+Provides: xen-utils
+Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}, xen-utils-common (>= ${source:Version})
+Recommends: bridge-utils, libc6-xen [i386], xen-hypervisor-4.11, qemu-system-x86, grub-xen-host [i386 amd64]
+Suggests: qemu-utils [i386 amd64], seabios [i386 amd64], ovmf
+Description: XEN administrative tools
+ The userspace tools to manage a system virtualized through the XEN virtual
+ machine monitor.
+ .
+ qemu-utils and seabios are neded for "Xen HVM" (amd64 and i386)
+Built-Using: ${misc:Built-Using}
+
+Package: xen-hypervisor-4.11-amd64
+Architecture: amd64 i386
+Provides: xen-hypervisor, xen-hypervisor-4.11, xen-hypervisor-amd64
+Depends: ${misc:Depends}
+Recommends: xen-utils-4.11, xen-hypervisor-common
+Description: Xen Hypervisor on AMD64
+ The hypervisor is the "core" for XEN itself.  It gets booted by the boot
+ loader and controls cpu and memory, sharing them between your
+ administrative domain (Domain 0) and the virtual guest systems.
+ .
+ In order to boot a XEN system along with this package you also need a
+ kernel specifically crafted to work as the Domain 0, mediating hardware
+ access for XEN itself.
+
+Package: xen-system-amd64
+Architecture: amd64 i386
+Provides: xen-system
+Depends: xen-hypervisor-4.11-amd64, xen-hypervisor-common, xen-utils-4.11, ${misc:Depends}
+Description: Xen System on AMD64 (meta-package)
+ This package depends on the latest Xen hypervisor for use on AMD64 and the
+ Xen utils.
+
+Package: xen-hypervisor-4.11-arm64
+Architecture: arm64
+Provides: xen-hypervisor, xen-hypervisor-4.11, xen-hypervisor-arm64
+Depends: ${misc:Depends}
+Recommends: xen-utils-4.11, xen-hypervisor-common
+Description: Xen Hypervisor on ARM64
+ The hypervisor is the "core" for XEN itself.  It gets booted by the boot
+ loader and controls cpu and memory, sharing them between your
+ administrative domain (Domain 0) and the virtual guest systems.
+ .
+ In order to boot a XEN system along with this package you also need a
+ kernel specifically crafted to work as the Domain 0, mediating hardware
+ access for XEN itself.
+
+Package: xen-system-arm64
+Architecture: arm64
+Provides: xen-system
+Depends: xen-hypervisor-4.11-arm64, xen-hypervisor-common, xen-utils-4.11, ${misc:Depends}
+Description: Xen System on ARM64 (meta-package)
+ This package depends on the latest Xen hypervisor for use on ARM64 and the
+ Xen utils.
+
+Package: xen-hypervisor-4.11-armhf
+Architecture: armhf
+Provides: xen-hypervisor, xen-hypervisor-4.11, xen-hypervisor-armhf
+Depends: ${misc:Depends}
+Recommends: xen-utils-4.11, xen-hypervisor-common
+Description: Xen Hypervisor on ARMHF
+ The hypervisor is the "core" for XEN itself.  It gets booted by the boot
+ loader and controls cpu and memory, sharing them between your
+ administrative domain (Domain 0) and the virtual guest systems.
+ .
+ In order to boot a XEN system along with this package you also need a
+ kernel specifically crafted to work as the Domain 0, mediating hardware
+ access for XEN itself.
+
+Package: xen-system-armhf
+Architecture: armhf
+Provides: xen-system
+Depends: xen-hypervisor-4.11-armhf, xen-hypervisor-common, xen-utils-4.11, ${misc:Depends}
+Description: Xen System on ARMHF (meta-package)
+ This package depends on the latest Xen hypervisor for use on ARMHF and the
+ Xen utils.
+
diff --git a/control.md5sum b/control.md5sum
new file mode 100644 (file)
index 0000000..8a45735
--- /dev/null
@@ -0,0 +1,17 @@
+90846bd8cd1227c290d02071e1f3b141  debian/changelog
+dc7b5d9f0538e3180af4e9aff9b0bd57  debian/bin/gencontrol.py
+9e089bdfb9c848da38da7f50e37a5502  debian/templates/control.main.in
+a15fa64ce6deead28d33c1581b14dba7  debian/templates/xen-hypervisor.postinst.in
+28356e01cce3f5f226bacec4c49a7f1e  debian/templates/control.system.latest.in
+03f63e67cf2d915bfbb535f8c9d9e2e4  debian/templates/xen-utils.postinst.in
+63ad8a975156f7bf2327f0e1dc7fc9e2  debian/templates/control.source.in
+22492e0565a4754b5e008ca7cac871da  debian/templates/xen-hypervisor.postrm.in
+02ec00ee85d07ab4eb277a91df014e0c  debian/templates/control.hypervisor.in
+4974334083116945da78ec656b4371f5  debian/templates/control.utils.in
+dcabf82578122540e0534f72750698d5  debian/templates/xen-utils.lintian-overrides.in
+b6acd21c3924e6ec6f9c547afbbc7d9e  debian/templates/xen-utils.prerm.in
+9851cdcecfae45a8c4f95ef676e26973  debian/arch/defines
+bda767ffd62b57de88b50731794f1374  debian/arch/i386/defines
+06efb201e83233c4607b13c8dad5c031  debian/arch/armhf/defines
+afd11afd204a8929340d194894572353  debian/arch/amd64/defines
+b6a35272efc8545fafab547e1cf492cb  debian/arch/arm64/defines
diff --git a/copyright b/copyright
new file mode 100644 (file)
index 0000000..9a0736c
--- /dev/null
+++ b/copyright
@@ -0,0 +1,307 @@
+This work was downloaded from
+
+    http://xenbits.xensource.com/
+
+Copyright:
+
+    Copyright (C) 1998-2005 Hewlett-Packard Co
+                  1999-2006 Silicon Graphics, Inc
+                  2001-2006 IBM Corporation
+                  2005-2006 XenSource Inc
+                  2006-2010 Citrix Systems Inc.
+    and many others
+
+License:
+
+    This package is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License version 2 as
+    published by the Free Software Foundation.
+
+    This package is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program. If not, see <http://www.gnu.org/licenses/>
+
+On Debian systems, the complete text of the GNU General
+Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
+
+The bundled qemu is:
+
+    Copyright (C) 2007 Alexander Graf
+                  2005,2007 Alex Beregszaszi
+                  2005-2008 Andrzej Zaborowski <balrog@zabor.org>
+                  2005-2007 Anthony Liguori <anthony@codemonkey.ws>
+                  2004 Antony T Curtis
+                  2007 Arastra, Inc.
+                  2007 Armin Kuster <akuster@kama-aina.net> or
+                  1999 AT&T Laboratories Cambridge
+                  2006,2007 Aurelien Jarno
+                  2007-2008 AXIS Communications AB
+                  2007-2008 Bull S.A.S.
+                  2006 Christian Limpach
+                  2008 Citrix Systems, Inc.
+                  2005-2008 CodeSourcery
+                  2007 Dan Aloni
+                  1995,1996 Danny Gasparovski
+                  2000-2003 David McCullough <davidm@snapgear.com>
+                  2008 Dmitry Baryshkov
+                  2007-2009 Edgar E. Iglesias, Axis Communications AB.
+                  1996-1999 Eduardo Horvath
+                  1998,2003-2008 Fabrice Bellard
+                  2005 Filip Navara
+                  2006 Frederick Reeve
+                  2009 Freescale Semiconductor
+                  1986-2007 Free Software Foundation, Inc.
+                  2004 Gianni Tedesco
+                  2008 Gleb Natapov
+                  2002 Greg Ungerer <gerg@snapgear.com>
+                  2007-2009 Hervé Poussineau
+                  2005,2007,2008 IBM Corporation
+                  2008 IBM Corporation
+                  2006 Igor Kovalenko
+                  2006 InnoTek Systemberatung GmbH
+                  1999-2008 Intel Corporation
+                  2009 Isaku Yamahata
+                  2003-2004 James Yonan
+                  2008 Jan Kiszka
+                  2006 Joachim Henke
+                  2003-2007 Jocelyn Mayer
+                  2004,2005 Johannes E. Schindelin
+                  2005 Julian Chesterfield and Andrew Warfield.
+                  2008 Kamala Narasimhan
+                  1998 Kenneth Albanowski <kjahds@kjahds.com>
+                  2008 Kevin Wolf
+                  2009 Kevin Wolf <kwolf@suse.de>
+                  2009 Laurent Vivier
+                  2007-2008 Lauro Ramos Venancio  <lauro.venancio@indt.org.br>
+                  2000,2001 Lineo, by David McCullough <davidm@lineo.com>
+                  1991,1992,1996 Linus Torvalds
+                  2006 Lonnie Mendez
+                  2008 Lubomir Rintel
+                  2004,2007 Magnus Damm
+                  2004 Makoto Suzuki (suzu)
+                  2002-2006  Marcel Holtmann <marcel@holtmann.org>
+                  2006 Marius Groeger (FPU operations)
+                  2007 Marko Kohtala
+                  2002-2003  Maxim Krasnyansky <maxk@qualcomm.com>
+                  2008 Max Krasnyansky
+                  2005,2008 Mike Kronenberg
+                  2007 MontaVista Software, Inc
+                  2007 Neocleus Corporation.
+                  2007-2008 Nokia Corporation
+                  2001 OKTET Ltd., St.-Petersburg, Russia
+                  2006-2008 Openedhand Ltd.
+                  2007-2008 OpenMoko, Inc.
+                  1996 Paul Mackerras.
+                  2008 Paul Mundt
+                  2006 Pierre d'Herbemont
+                  2000-2001 Qualcomm Incorporated
+                  2006-2008 Qumranet Technologies
+                  1997-1999,2001,2009 Red Hat, Inc.
+                  1988,1989,1990,1991,1992 Richard Outerbridge
+                  2007 Robert Reif
+                  1998-2004 Samuel Rydh (samuel@ibrium.se)
+                  2005 Samuel Tardieu
+                  2007,2008 Samuel Thibault
+                  2008 Semihalf
+                  2008 Shin-ichiro KAWASAKI
+                  2002 SnapGear, by Paul Dale <pauli@snapgear.com>
+                  2006-2007 Stefan Weil
+                  2008 Takashi YOSHII
+                  1999,2000 Tatsuyuki Satoh , MultiArcadeMachineEmurator development
+                  1993 Theodore Ts'o
+                  2006,2007 Thiemo Seufer
+                  2003 Thomas M. Ogrisegg <tom@fnord.at>
+                  2006 Thomas Sailer
+                  1998-2001,2003 Thomas Sailer (t.sailer@alumni.ethz.ch)
+                  2006,2007 Thorsten Zitterell
+                  2000-2007 Tibor "TS" Schütz
+                  2008 TJ <linux@tjworld.net>
+                  2002-2005 Vassili Karpov (malc)
+                  2005 Vassili Karpov (malc)
+                  2007 Vladimir Ananiev <vovan888@gmail.com>
+                  2006 XenSource
+
+The Debian packaging is:
+
+    Copyright (C) 2008-2010 Bastian Blank <waldi@debian.org>
+
+you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+The following parts are subject of a different license:
+* tools/firmware/vgabios
+* tools/libaio
+* tools/libxen
+* tools/xenstat/libxenstat
+* tools/xenstore
+
+    This package is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This package is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+On Debian systems, the complete text of the GNU Lesser General
+Public License can be found in "/usr/share/common-licenses/LGPL-2".
+
+Files in xen/include/public are subject to the following license:
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+Files in extra/mini-os are subject to the following license:
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright notice,
+       this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+
+Files in tools/vtpm_manager are subject to the following license:
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of Intel Corporation nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+    STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+    OF THE POSSIBILITY OF SUCH DAMAGE.
+
+File tools/python/test.py is subject to the following license:
+
+    This software is Copyright (c) Zope Corporation (tm) and
+    Contributors. All rights reserved.
+
+    This license has been certified as open source. It has also
+    been designated as GPL compatible by the Free Software
+    Foundation (FSF).
+
+    Redistribution and use in source and binary forms, with or
+    without modification, are permitted provided that the
+    following conditions are met:
+
+    1. Redistributions in source code must retain the above
+       copyright notice, this list of conditions, and the following
+       disclaimer.
+
+    2. Redistributions in binary form must reproduce the above
+       copyright notice, this list of conditions, and the following
+       disclaimer in the documentation and/or other materials
+       provided with the distribution.
+
+    3. The name Zope Corporation (tm) must not be used to
+       endorse or promote products derived from this software
+       without prior written permission from Zope Corporation.
+
+    4. The right to distribute this software or to use it for
+       any purpose does not give you the right to use Servicemarks
+       (sm) or Trademarks (tm) of Zope Corporation. Use of them is
+       covered in a separate agreement (see
+       http://www.zope.com/Marks).
+
+    5. If any files are modified, you must cause the modified
+       files to carry prominent notices stating that you changed
+       the files and the date of any change.
+
+    Disclaimer
+      
+      THIS SOFTWARE IS PROVIDED BY ZOPE CORPORATION ``AS IS''
+      AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
+      NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+      AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
+      NO EVENT SHALL ZOPE CORPORATION OR ITS CONTRIBUTORS BE
+      LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+      EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+      LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+      LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+      CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+      OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+      SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+      DAMAGE.
+
+    This software consists of contributions made by Zope
+    Corporation and many individuals on behalf of Zope
+    Corporation.  Specific attributions are listed in the
+    accompanying credits file.
+
+Files in tools/python/logging are subject to the following license:
+
+    Copyright (C) 2001-2004 by Vinay Sajip. All Rights Reserved.
+
+    Permission to use, copy, modify, and distribute this software and its
+    documentation for any purpose and without fee is hereby granted,
+    provided that the above copyright notice appear in all copies and that
+    both that copyright notice and this permission notice appear in
+    supporting documentation, and that the name of Vinay Sajip
+    not be used in advertising or publicity pertaining to distribution
+    of the software without specific, written prior permission.
+
+    VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+    ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
+    VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+    ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+    AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+    IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
diff --git a/lib/python/debian_linux/__init__.py b/lib/python/debian_linux/__init__.py
new file mode 100644 (file)
index 0000000..b785ceb
--- /dev/null
@@ -0,0 +1 @@
+# Module
diff --git a/lib/python/debian_linux/abi.py b/lib/python/debian_linux/abi.py
new file mode 100644 (file)
index 0000000..0c4b3bd
--- /dev/null
@@ -0,0 +1,42 @@
+class Symbol(object):
+    def __init__(self, name, module, version, export):
+        self.name, self.module = name, module
+        self.version, self.export = version, export
+
+    def __eq__(self, other):
+        if not isinstance(other, Symbol):
+            return NotImplemented
+
+        # Symbols are resolved to modules by depmod at installation/
+        # upgrade time, not compile time, so moving a symbol between
+        # modules is not an ABI change.  Compare everything else.
+        if self.name != other.name:
+            return False
+        if self.version != other.version:
+            return False
+        if self.export != other.export:
+            return False
+
+        return True
+
+    def __ne__(self, other):
+        ret = self.__eq__(other)
+        if ret is NotImplemented:
+            return ret
+        return not ret
+
+
+class Symbols(dict):
+    def __init__(self, file=None):
+        if file:
+            self.read(file)
+
+    def read(self, file):
+        for line in file:
+            version, name, module, export = line.strip().split()
+            self[name] = Symbol(name, module, version, export)
+
+    def write(self, file):
+        for s in sorted(self.values(), key=lambda i: i.name):
+            file.write("%s %s %s %s\n" %
+                    (s.version, s.name, s.module, s.export))
diff --git a/lib/python/debian_linux/config.py b/lib/python/debian_linux/config.py
new file mode 100644 (file)
index 0000000..004469a
--- /dev/null
@@ -0,0 +1,260 @@
+import collections
+import os
+import os.path
+import pickle
+import re
+import sys
+import textwrap
+
+from configparser import RawConfigParser
+
+__all__ = [
+    'ConfigCoreDump',
+    'ConfigCoreHierarchy',
+    'ConfigParser',
+]
+
+
+class SchemaItemBoolean(object):
+    def __call__(self, i):
+        i = i.strip().lower()
+        if i in ("true", "1"):
+            return True
+        if i in ("false", "0"):
+            return False
+        raise Error
+
+
+class SchemaItemInteger(object):
+    def __call__(self, i):
+        try:
+            return int(i.strip(), 0)
+        except ValueError:
+            raise Error
+
+
+class SchemaItemList(object):
+    def __init__(self, type="\s+"):
+        self.type = type
+
+    def __call__(self, i):
+        i = i.strip()
+        if not i:
+            return []
+        return [j.strip() for j in re.split(self.type, i)]
+
+
+# Using OrderedDict instead of dict makes the pickled config reproducible
+class ConfigCore(collections.OrderedDict):
+    def get_merge(self, section, arch, featureset, flavour, key, default=None):
+        temp = []
+
+        if arch and featureset and flavour:
+            temp.append(self.get((section, arch, featureset, flavour), {}).get(key))
+            temp.append(self.get((section, arch, None, flavour), {}).get(key))
+        if arch and featureset:
+            temp.append(self.get((section, arch, featureset), {}).get(key))
+        if arch:
+            temp.append(self.get((section, arch), {}).get(key))
+        if featureset:
+            temp.append(self.get((section, None, featureset), {}).get(key))
+        temp.append(self.get((section,), {}).get(key))
+
+        ret = []
+
+        for i in temp:
+            if i is None:
+                continue
+            elif isinstance(i, (list, tuple)):
+                ret.extend(i)
+            elif ret:
+                # TODO
+                return ret
+            else:
+                return i
+
+        return ret or default
+
+    def merge(self, section, arch=None, featureset=None, flavour=None):
+        ret = {}
+        ret.update(self.get((section,), {}))
+        if featureset:
+            ret.update(self.get((section, None, featureset), {}))
+        if arch:
+            ret.update(self.get((section, arch), {}))
+        if arch and featureset:
+            ret.update(self.get((section, arch, featureset), {}))
+        if arch and featureset and flavour:
+            ret.update(self.get((section, arch, None, flavour), {}))
+            ret.update(self.get((section, arch, featureset, flavour), {}))
+        return ret
+
+    def dump(self, fp):
+        pickle.dump(self, fp, 0)
+
+
+class ConfigCoreDump(object):
+    def __new__(self, fp):
+        return pickle.load(fp)
+
+
+class ConfigCoreHierarchy(object):
+    schema_base = {
+        'base': {
+            'arches': SchemaItemList(),
+            'enabled': SchemaItemBoolean(),
+            'featuresets': SchemaItemList(),
+            'flavours': SchemaItemList(),
+        },
+    }
+
+    def __new__(cls, schema, dirs=[]):
+        schema_complete = cls.schema_base.copy()
+        for key, value in schema.items():
+            schema_complete.setdefault(key, {}).update(value)
+        return cls.Reader(dirs, schema_complete)()
+
+    class Reader(object):
+        config_name = "defines"
+
+        def __init__(self, dirs, schema):
+            self.dirs, self.schema = dirs, schema
+
+        def __call__(self):
+            ret = ConfigCore()
+            self.read(ret)
+            return ret
+
+        def get_files(self, *dirs):
+            dirs = list(dirs)
+            dirs.append(self.config_name)
+            return (os.path.join(i, *dirs) for i in self.dirs if i)
+
+        def read_arch(self, ret, arch):
+            config = ConfigParser(self.schema)
+            config.read(self.get_files(arch))
+
+            featuresets = config['base', ].get('featuresets', [])
+            flavours = config['base', ].get('flavours', [])
+
+            for section in iter(config):
+                if section[0] in featuresets:
+                    real = (section[-1], arch, section[0])
+                elif len(section) > 1:
+                    real = (section[-1], arch, None) + section[:-1]
+                else:
+                    real = (section[-1], arch) + section[:-1]
+                s = ret.get(real, {})
+                s.update(config[section])
+                ret[tuple(real)] = s
+
+            for featureset in featuresets:
+                self.read_arch_featureset(ret, arch, featureset)
+
+            if flavours:
+                base = ret['base', arch]
+                featuresets.insert(0, 'none')
+                base['featuresets'] = featuresets
+                del base['flavours']
+                ret['base', arch] = base
+                ret['base', arch, 'none'] = {'flavours': flavours, 'implicit-flavour': True}
+
+        def read_arch_featureset(self, ret, arch, featureset):
+            config = ConfigParser(self.schema)
+            config.read(self.get_files(arch, featureset))
+
+            flavours = config['base', ].get('flavours', [])
+
+            for section in iter(config):
+                real = (section[-1], arch, featureset) + section[:-1]
+                s = ret.get(real, {})
+                s.update(config[section])
+                ret[tuple(real)] = s
+
+        def read(self, ret):
+            config = ConfigParser(self.schema)
+            config.read(self.get_files())
+
+            arches = config['base', ]['arches']
+            featuresets = config['base', ].get('featuresets', [])
+
+            for section in iter(config):
+                if section[0].startswith('featureset-'):
+                    real = (section[-1], None, section[0][11:])
+                else:
+                    real = (section[-1],) + section[1:]
+                ret[real] = config[section]
+
+            for arch in arches:
+                self.read_arch(ret, arch)
+            for featureset in featuresets:
+                self.read_featureset(ret, featureset)
+
+        def read_featureset(self, ret, featureset):
+            config = ConfigParser(self.schema)
+            config.read(self.get_files('featureset-%s' % featureset))
+
+            for section in iter(config):
+                real = (section[-1], None, featureset)
+                s = ret.get(real, {})
+                s.update(config[section])
+                ret[real] = s
+
+
+class ConfigParser(object):
+    __slots__ = '_config', 'schemas'
+
+    def __init__(self, schemas):
+        self.schemas = schemas
+
+        self._config = config = RawConfigParser()
+
+    def __getitem__(self, key):
+        return self._convert()[key]
+
+    def __iter__(self):
+        return iter(self._convert())
+
+    def __str__(self):
+        return '<%s(%s)>' % (self.__class__.__name__, self._convert())
+
+    def _convert(self):
+        ret = {}
+        for section in self._config.sections():
+            data = {}
+            for key, value in self._config.items(section):
+                data[key] = value
+            section_list = section.split('_')
+            section_base = section_list[-1]
+            if section_base in self.schemas:
+                section_ret = tuple(section_list)
+                data = self._convert_one(self.schemas[section_base], data)
+            else:
+                section_ret = (section, )
+            ret[section_ret] = data
+        return ret
+
+    def _convert_one(self, schema, data):
+        ret = {}
+        for key, value in data.items():
+            if key in schema:
+                value = schema[key](value)
+            ret[key] = value
+        return ret
+    def keys(self):
+        return self._convert().keys()
+
+    def read(self, data):
+        return self._config.read(data)
+
+
+if __name__ == '__main__':
+    import sys
+    sys.path.append('debian/lib/python')
+    config = ConfigCoreDump(open('debian/config.defines.dump', 'rb'))
+    for section, items in sorted(config.items(), key=lambda a:tuple(i or '' for i in a[0])):
+        print(u"[%s]" % (section,))
+        for item, value in sorted(items.items()):
+            print(u"%s: %s" % (item, value))
+        print()
diff --git a/lib/python/debian_linux/debian.py b/lib/python/debian_linux/debian.py
new file mode 100644 (file)
index 0000000..7ad5f93
--- /dev/null
@@ -0,0 +1,468 @@
+import collections
+import os.path
+import re
+
+from . import utils
+
+
+class Changelog(list):
+    _rules = r"""
+^
+(?P<source>
+    \w[-+0-9a-z.]+
+)
+\ 
+\(
+(?P<version>
+    [^\(\)\ \t]+
+)
+\)
+\s+
+(?P<distribution>
+    [-+0-9a-zA-Z.]+
+)
+\;\s+urgency=
+(?P<urgency>
+    \w+
+)
+"""
+    _re = re.compile(_rules, re.X)
+
+    class Entry(object):
+        __slot__ = 'distribution', 'source', 'version', 'urgency'
+
+        def __init__(self, distribution, source, version, urgency):
+            self.distribution, self.source, self.version, self.urgency = \
+                distribution, source, version, urgency
+
+    def __init__(self, dir='', version=None):
+        if version is None:
+            version = Version
+        f = open(os.path.join(dir, "debian/changelog"), encoding="UTF-8")
+        while True:
+            line = f.readline()
+            if not line:
+                break
+            match = self._re.match(line)
+            if not match:
+                continue
+            try:
+                v = version(match.group('version'))
+            except Exception:
+                if not len(self):
+                    raise
+                v = Version(match.group('version'))
+            self.append(self.Entry(match.group('distribution'),
+                                   match.group('source'), v,
+                                   match.group('urgency')))
+
+
+class Version(object):
+    _version_rules = r"""
+^
+(?:
+    (?P<epoch>
+        \d+
+    )
+    :
+)?
+(?P<upstream>
+    .+?
+)   
+(?:
+    -
+    (?P<revision>[^-]+)
+)?
+$
+"""
+    _version_re = re.compile(_version_rules, re.X)
+
+    def __init__(self, version):
+        match = self._version_re.match(version)
+        if match is None:
+            raise RuntimeError(u"Invalid debian version")
+        self.epoch = None
+        if match.group("epoch") is not None:
+            self.epoch = int(match.group("epoch"))
+        self.upstream = match.group("upstream")
+        self.revision = match.group("revision")
+
+    def __str__(self):
+        return self.complete
+
+    @property
+    def complete(self):
+        if self.epoch is not None:
+            return u"%d:%s" % (self.epoch, self.complete_noepoch)
+        return self.complete_noepoch
+
+    @property
+    def complete_noepoch(self):
+        if self.revision is not None:
+            return u"%s-%s" % (self.upstream, self.revision)
+        return self.upstream
+
+    @property
+    def debian(self):
+        from warnings import warn
+        warn(u"debian argument was replaced by revision", DeprecationWarning, stacklevel=2)
+        return self.revision
+
+
+class VersionLinux(Version):
+    _version_linux_rules = r"""
+^
+(?P<version>
+    \d+\.\d+
+)
+(?P<update>
+    (?:\.\d+)?
+    (?:-[a-z]+\d+)?
+)
+(?:
+    ~
+    (?P<modifier>
+        .+?
+    )
+)?
+(?:
+    \.dfsg\.
+    (?P<dfsg>
+        \d+
+    )
+)?
+-
+\d+
+(\.\d+)?
+(?:
+    (?P<revision_experimental>
+        ~exp\d+
+    )
+    |
+    (?P<revision_security>
+        [~+]deb\d+u\d+
+    )?
+    (?P<revision_backports>
+        ~bpo\d+\+\d+
+    )?
+    |
+    (?P<revision_other>
+        [^-]+
+    )
+)
+$
+"""
+    _version_linux_re = re.compile(_version_linux_rules, re.X)
+
+    def __init__(self, version):
+        super(VersionLinux, self).__init__(version)
+        match = self._version_linux_re.match(version)
+        if match is None:
+            raise RuntimeError(u"Invalid debian linux version")
+        d = match.groupdict()
+        self.linux_modifier = d['modifier']
+        self.linux_version = d['version']
+        if d['modifier'] is not None:
+            assert not d['update']
+            self.linux_upstream = '-'.join((d['version'], d['modifier']))
+        else:
+            self.linux_upstream = d['version']
+        self.linux_upstream_full = self.linux_upstream + d['update']
+        self.linux_dfsg = d['dfsg']
+        self.linux_revision_experimental = match.group('revision_experimental') and True
+        self.linux_revision_security = match.group('revision_security') and True
+        self.linux_revision_backports = match.group('revision_backports') and True
+        self.linux_revision_other = match.group('revision_other') and True
+
+
+class PackageArchitecture(collections.MutableSet):
+    __slots__ = '_data'
+
+    def __init__(self, value=None):
+        self._data = set()
+        if value:
+            self.extend(value)
+
+    def __contains__(self, value):
+        return self._data.__contains__(value)
+
+    def __iter__(self):
+        return self._data.__iter__()
+
+    def __len__(self):
+        return self._data.__len__()
+
+    def __str__(self):
+        return ' '.join(sorted(self))
+
+    def add(self, value):
+        self._data.add(value)
+
+    def discard(self, value):
+        self._data.discard(value)
+
+    def extend(self, value):
+        if isinstance(value, str):
+            for i in re.split('\s', value.strip()):
+                self.add(i)
+        else:
+            raise RuntimeError
+
+
+class PackageDescription(object):
+    __slots__ = "short", "long"
+
+    def __init__(self, value=None):
+        self.short = []
+        self.long = []
+        if value is not None:
+            desc_split = value.split("\n", 1)
+            self.append_short(desc_split[0])
+            if len(desc_split) == 2:
+                self.append(desc_split[1])
+
+    def __str__(self):
+        wrap = utils.TextWrapper(width=74, fix_sentence_endings=True).wrap
+        short = ', '.join(self.short)
+        long_pars = []
+        for i in self.long:
+            long_pars.append(wrap(i))
+        long = '\n .\n '.join(['\n '.join(i) for i in long_pars])
+        return short + '\n ' + long if long else short
+
+    def append(self, str):
+        str = str.strip()
+        if str:
+            self.long.extend(str.split(u"\n.\n"))
+
+    def append_short(self, str):
+        for i in [i.strip() for i in str.split(u",")]:
+            if i:
+                self.short.append(i)
+
+    def extend(self, desc):
+        if isinstance(desc, PackageDescription):
+            self.short.extend(desc.short)
+            self.long.extend(desc.long)
+        else:
+            raise TypeError
+
+
+class PackageRelation(list):
+    def __init__(self, value=None, override_arches=None):
+        if value:
+            self.extend(value, override_arches)
+
+    def __str__(self):
+        return ', '.join(str(i) for i in self)
+
+    def _search_value(self, value):
+        for i in self:
+            if i._search_value(value):
+                return i
+        return None
+
+    def append(self, value, override_arches=None):
+        if isinstance(value, str):
+            value = PackageRelationGroup(value, override_arches)
+        elif not isinstance(value, PackageRelationGroup):
+            raise ValueError(u"got %s" % type(value))
+        j = self._search_value(value)
+        if j:
+            j._update_arches(value)
+        else:
+            super(PackageRelation, self).append(value)
+
+    def extend(self, value, override_arches=None):
+        if isinstance(value, str):
+            value = (j.strip() for j in re.split(',', value.strip()))
+        for i in value:
+            self.append(i, override_arches)
+
+
+class PackageRelationGroup(list):
+    def __init__(self, value=None, override_arches=None):
+        if value:
+            self.extend(value, override_arches)
+
+    def __str__(self):
+        return ' | '.join(str(i) for i in self)
+
+    def _search_value(self, value):
+        for i, j in zip(self, value):
+            if i.name != j.name or i.operator != j.operator or \
+               i.version != j.version or i.restrictions != j.restrictions:
+                return None
+        return self
+
+    def _update_arches(self, value):
+        for i, j in zip(self, value):
+            if i.arches:
+                for arch in j.arches:
+                    if arch not in i.arches:
+                        i.arches.append(arch)
+
+    def append(self, value, override_arches=None):
+        if isinstance(value, str):
+            value = PackageRelationEntry(value, override_arches)
+        elif not isinstance(value, PackageRelationEntry):
+            raise ValueError
+        super(PackageRelationGroup, self).append(value)
+
+    def extend(self, value, override_arches=None):
+        if isinstance(value, str):
+            value = (j.strip() for j in re.split('\|', value.strip()))
+        for i in value:
+            self.append(i, override_arches)
+
+
+class PackageRelationEntry(object):
+    __slots__ = "name", "operator", "version", "arches", "restrictions"
+
+    _re = re.compile(r'^(\S+)(?: \((<<|<=|=|!=|>=|>>)\s*([^)]+)\))?(?: \[([^]]+)\])?(?: <([^>]+)>)?$')
+
+    class _operator(object):
+        OP_LT = 1
+        OP_LE = 2
+        OP_EQ = 3
+        OP_NE = 4
+        OP_GE = 5
+        OP_GT = 6
+
+        operators = {
+                '<<': OP_LT,
+                '<=': OP_LE,
+                '=': OP_EQ,
+                '!=': OP_NE,
+                '>=': OP_GE,
+                '>>': OP_GT,
+        }
+
+        operators_neg = {
+                OP_LT: OP_GE,
+                OP_LE: OP_GT,
+                OP_EQ: OP_NE,
+                OP_NE: OP_EQ,
+                OP_GE: OP_LT,
+                OP_GT: OP_LE,
+        }
+
+        operators_text = dict((b, a) for a, b in operators.items())
+
+        __slots__ = '_op',
+
+        def __init__(self, value):
+            self._op = self.operators[value]
+
+        def __neg__(self):
+            return self.__class__(self.operators_text[self.operators_neg[self._op]])
+
+        def __str__(self):
+            return self.operators_text[self._op]
+
+        def __eq__(self, other):
+            return type(other) == type(self) and self._op == other._op
+
+    def __init__(self, value=None, override_arches=None):
+        if not isinstance(value, str):
+            raise ValueError
+
+        self.parse(value)
+
+        if override_arches:
+            self.arches = list(override_arches)
+
+    def __str__(self):
+        ret = [self.name]
+        if self.operator is not None and self.version is not None:
+            ret.extend((' (', str(self.operator), ' ', self.version, ')'))
+        if self.arches:
+            ret.extend((' [', ' '.join(self.arches), ']'))
+        if self.restrictions:
+            ret.extend((' <', ' '.join(self.restrictions), '>'))
+        return ''.join(ret)
+
+    def parse(self, value):
+        match = self._re.match(value)
+        if match is None:
+            raise RuntimeError(u"Can't parse dependency %s" % value)
+        match = match.groups()
+        self.name = match[0]
+        if match[1] is not None:
+            self.operator = self._operator(match[1])
+        else:
+            self.operator = None
+        self.version = match[2]
+        if match[3] is not None:
+            self.arches = re.split('\s+', match[3])
+        else:
+            self.arches = []
+        if match[4] is not None:
+            self.restrictions = re.split('\s+', match[4])
+        else:
+            self.restrictions = []
+
+
+class _ControlFileDict(dict):
+    def __setitem__(self, key, value):
+        try:
+            cls = self._fields[key]
+            if not isinstance(value, cls):
+                value = cls(value)
+        except KeyError:
+            pass
+        super(_ControlFileDict, self).__setitem__(key, value)
+
+    def keys(self):
+        keys = set(super(_ControlFileDict, self).keys())
+        for i in self._fields.keys():
+            if i in self:
+                keys.remove(i)
+                yield i
+        for i in sorted(list(keys)):
+            yield i
+
+    def items(self):
+        for i in self.keys():
+            yield (i, self[i])
+
+    def values(self):
+        for i in self.keys():
+            yield self[i]
+
+
+class Package(_ControlFileDict):
+    _fields = collections.OrderedDict((
+        ('Package', str),
+        ('Source', str),
+        ('Architecture', PackageArchitecture),
+        ('Section', str),
+        ('Priority', str),
+        ('Maintainer', str),
+        ('Uploaders', str),
+        ('Standards-Version', str),
+        ('Build-Depends', PackageRelation),
+        ('Build-Depends-Arch', PackageRelation),
+        ('Build-Depends-Indep', PackageRelation),
+        ('Provides', PackageRelation),
+        ('Pre-Depends', PackageRelation),
+        ('Depends', PackageRelation),
+        ('Recommends', PackageRelation),
+        ('Suggests', PackageRelation),
+        ('Replaces', PackageRelation),
+        ('Breaks', PackageRelation),
+        ('Conflicts', PackageRelation),
+        ('Description', PackageDescription),
+    ))
+
+
+class TestsControl(_ControlFileDict):
+    _fields = collections.OrderedDict((
+        ('Tests', str),
+        ('Test-Command', str),
+        ('Restrictions', str),
+        ('Features', str),
+        ('Depends', PackageRelation),
+        ('Tests-Directory', str),
+        ('Classes', str),
+    ))
diff --git a/lib/python/debian_linux/firmware.py b/lib/python/debian_linux/firmware.py
new file mode 100644 (file)
index 0000000..ece3743
--- /dev/null
@@ -0,0 +1,89 @@
+import re
+
+
+class FirmwareFile(object):
+    def __init__(self, binary, desc=None, source=None, version=None):
+        self.binary = binary
+        self.desc = desc
+        self.source = source
+        self.version = version
+
+
+class FirmwareSection(object):
+    def __init__(self, driver, files, licence):
+        self.driver = driver
+        self.files = files
+        self.licence = licence
+
+
+class FirmwareWhence(list):
+    def __init__(self, file):
+        self.read(file)
+
+    def read(self, file):
+        in_header = True
+        driver = None
+        files = {}
+        licence = None
+        binary = []
+        desc = None
+        source = []
+        version = None
+
+        for line in file:
+            if line.startswith('----------'):
+                if in_header:
+                    in_header = False
+                else:
+                    # Finish old section
+                    if driver:
+                        self.append(FirmwareSection(driver, files, licence))
+                    driver = None
+                    files = {}
+                    licence = None
+                continue
+
+            if in_header:
+                continue
+
+            if line == '\n':
+                # End of field; end of file fields
+                for b in binary:
+                    # XXX The WHENCE file isn't yet consistent in its
+                    # association of binaries and their sources and
+                    # metadata.  This associates all sources and
+                    # metadata in a group with each binary.
+                    files[b] = FirmwareFile(b, desc, source, version)
+                binary = []
+                desc = None
+                source = []
+                version = None
+                continue
+
+            match = re.match(
+                r'(Driver|File|Info|Licen[cs]e|Source|Version'
+                r'|Original licen[cs]e info(?:rmation)?):\s*(.*)\n',
+                line)
+            if match:
+                keyword, value = match.group(1, 2)
+                if keyword == 'Driver':
+                    driver = value.split(' ')[0].lower()
+                elif keyword == 'File':
+                    match = re.match(r'(\S+)(?:\s+--\s+(.*))?', value)
+                    binary.append(match.group(1))
+                    desc = match.group(2)
+                elif keyword in ['Info', 'Version']:
+                    version = value
+                elif keyword == 'Source':
+                    source.append(value)
+                else:
+                    licence = value
+            elif licence is not None:
+                licence = (licence + '\n' +
+                           re.sub(r'^(?:[/ ]\*| \*/)?\s*(.*?)\s*$', r'\1', line))
+
+        # Finish last section if non-empty
+        for b in binary:
+            files[b] = FirmwareFile(b, desc, source, version)
+        if driver:
+            self.append(FirmwareSection(driver, files, licence))
diff --git a/lib/python/debian_linux/gencontrol.py b/lib/python/debian_linux/gencontrol.py
new file mode 100644 (file)
index 0000000..370dccb
--- /dev/null
@@ -0,0 +1,355 @@
+import codecs
+from collections import OrderedDict
+
+from .debian import *
+
+
+class PackagesList(OrderedDict):
+    def append(self, package):
+        self[package['Package']] = package
+
+    def extend(self, packages):
+        for package in packages:
+            self[package['Package']] = package
+
+
+class Makefile(object):
+    def __init__(self):
+        self.rules = {}
+        self.add('.NOTPARALLEL')
+
+    def add(self, name, deps=None, cmds=None):
+        if name in self.rules:
+            self.rules[name].add(deps, cmds)
+        else:
+            self.rules[name] = self.Rule(name, deps, cmds)
+        if deps is not None:
+            for i in deps:
+                if i not in self.rules:
+                    self.rules[i] = self.Rule(i)
+
+    def write(self, out):
+        for i in sorted(self.rules.keys()):
+            self.rules[i].write(out)
+
+    class Rule(object):
+        def __init__(self, name, deps=None, cmds=None):
+            self.name = name
+            self.deps, self.cmds = set(), []
+            self.add(deps, cmds)
+
+        def add(self, deps=None, cmds=None):
+            if deps is not None:
+                self.deps.update(deps)
+            if cmds is not None:
+                self.cmds.append(cmds)
+
+        def write(self, out):
+            deps_string = ''
+            if self.deps:
+                deps = list(self.deps)
+                deps.sort()
+                deps_string = ' ' + ' '.join(deps)
+
+            if self.cmds:
+                if deps_string:
+                    out.write('%s::%s\n' % (self.name, deps_string))
+                for c in self.cmds:
+                    out.write('%s::\n' % self.name)
+                    for i in c:
+                        out.write('\t%s\n' % i)
+            else:
+                out.write('%s:%s\n' % (self.name, deps_string))
+
+
+class MakeFlags(dict):
+    def __repr__(self):
+        repr = super(flags, self).__repr__()
+        return "%s(%s)" % (self.__class__.__name__, repr)
+
+    def __str__(self):
+        return ' '.join("%s='%s'" % i for i in sorted(self.items()))
+
+    def copy(self):
+        return self.__class__(super(MakeFlags, self).copy())
+
+
+class Gencontrol(object):
+    makefile_targets = ('binary-arch', 'build-arch', 'setup')
+    makefile_targets_indep = ('binary-indep', 'build-indep', 'setup')
+
+    def __init__(self, config, templates, version=Version):
+        self.config, self.templates = config, templates
+        self.changelog = Changelog(version=version)
+        self.vars = {}
+
+    def __call__(self):
+        packages = PackagesList()
+        makefile = Makefile()
+
+        self.do_source(packages)
+        self.do_main(packages, makefile)
+        self.do_extra(packages, makefile)
+
+        self.write(packages, makefile)
+
+    def do_source(self, packages):
+        source = self.templates["control.source"][0]
+        source['Source'] = self.changelog[0].source
+        packages['source'] = self.process_package(source, self.vars)
+
+    def do_main(self, packages, makefile):
+        config_entry = self.config['base', ]
+        vars = self.vars.copy()
+
+        makeflags = MakeFlags()
+        extra = {}
+
+        self.do_main_setup(vars, makeflags, extra)
+        self.do_main_makefile(makefile, makeflags, extra)
+        self.do_main_packages(packages, vars, makeflags, extra)
+        self.do_main_recurse(packages, makefile, vars, makeflags, extra)
+
+    def do_main_setup(self, vars, makeflags, extra):
+        pass
+
+    def do_main_makefile(self, makefile, makeflags, extra):
+        makefile.add('build-indep', cmds=["$(MAKE) -f debian/rules.real build-indep %s" % makeflags])
+        makefile.add('binary-indep', cmds=["$(MAKE) -f debian/rules.real binary-indep %s" % makeflags])
+
+    def do_main_packages(self, packages, vars, makeflags, extra):
+        pass
+
+    def do_main_recurse(self, packages, makefile, vars, makeflags, extra):
+        for featureset in self.config['base', ]['featuresets']:
+            if self.config.merge('base', None, featureset).get('enabled', True):
+                self.do_indep_featureset(packages, makefile, featureset,
+                                         vars.copy(), makeflags.copy(), extra)
+        for arch in iter(self.config['base', ]['arches']):
+            self.do_arch(packages, makefile, arch, vars.copy(), makeflags.copy(), extra)
+
+    def do_extra(self, packages, makefile):
+        templates_extra = self.templates.get("control.extra", None)
+        if templates_extra is None:
+            return
+
+        packages_extra = self.process_packages(templates_extra, self.vars)
+        packages.extend(packages_extra)
+        extra_arches = {}
+        for package in packages_extra:
+            arches = package['Architecture']
+            for arch in arches:
+                i = extra_arches.get(arch, [])
+                i.append(package)
+                extra_arches[arch] = i
+        for arch in sorted(extra_arches.keys()):
+            cmds = []
+            for i in extra_arches[arch]:
+                cmds.append("$(MAKE) -f debian/rules.real install-dummy ARCH='%s' DH_OPTIONS='-p%s'" % (arch, i['Package']))
+            makefile.add('binary-arch_%s' % arch, ['binary-arch_%s_extra' % arch])
+            makefile.add("binary-arch_%s_extra" % arch, cmds = cmds)
+
+    def do_indep_featureset(self, packages, makefile, featureset, vars,
+                             makeflags, extra):
+        vars['localversion'] = ''
+        if featureset != 'none':
+            vars['localversion'] = '-' + featureset
+
+        self.do_indep_featureset_setup(vars, makeflags, featureset, extra)
+        self.do_indep_featureset_makefile(makefile, featureset, makeflags,
+                                          extra)
+        self.do_indep_featureset_packages(packages, makefile, featureset,
+                                          vars, makeflags, extra)
+
+    def do_indep_featureset_setup(self, vars, makeflags, featureset, extra):
+        pass
+
+    def do_indep_featureset_makefile(self, makefile, featureset, makeflags,
+                                     extra):
+        makeflags['FEATURESET'] = featureset
+
+        for i in self.makefile_targets_indep:
+            target1 = i
+            target2 = '_'.join((target1, featureset))
+            target3 = '_'.join((target2, 'real'))
+            makefile.add(target1, [target2])
+            makefile.add(target2, [target3])
+
+    def do_indep_featureset_packages(self, packages, makefile, featureset,
+                                     vars, makeflags, extra):
+        pass
+
+    def do_arch(self, packages, makefile, arch, vars, makeflags, extra):
+        vars['arch'] = arch
+
+        self.do_arch_setup(vars, makeflags, arch, extra)
+        self.do_arch_makefile(makefile, arch, makeflags, extra)
+        self.do_arch_packages(packages, makefile, arch, vars, makeflags, extra)
+        self.do_arch_recurse(packages, makefile, arch, vars, makeflags, extra)
+
+    def do_arch_setup(self, vars, makeflags, arch, extra):
+        pass
+
+    def do_arch_makefile(self, makefile, arch, makeflags, extra):
+        makeflags['ARCH'] = arch
+
+        for i in self.makefile_targets:
+            target1 = i
+            target2 = '_'.join((target1, arch))
+            target3 = '_'.join((target2, 'real'))
+            makefile.add(target1, [target2])
+            makefile.add(target2, [target3])
+
+    def do_arch_packages(self, packages, makefile, arch, vars, makeflags, extra):
+        pass
+
+    def do_arch_recurse(self, packages, makefile, arch, vars, makeflags, extra):
+        for featureset in self.config['base', arch].get('featuresets', ()):
+            self.do_featureset(packages, makefile, arch, featureset, vars.copy(), makeflags.copy(), extra)
+
+    def do_featureset(self, packages, makefile, arch, featureset, vars, makeflags, extra):
+        config_base = self.config.merge('base', arch, featureset)
+        if not config_base.get('enabled', True):
+            return
+
+        vars['localversion'] = ''
+        if featureset != 'none':
+            vars['localversion'] = '-' + featureset
+
+        self.do_featureset_setup(vars, makeflags, arch, featureset, extra)
+        self.do_featureset_makefile(makefile, arch, featureset, makeflags, extra)
+        self.do_featureset_packages(packages, makefile, arch, featureset, vars, makeflags, extra)
+        self.do_featureset_recurse(packages, makefile, arch, featureset, vars, makeflags, extra)
+
+    def do_featureset_setup(self, vars, makeflags, arch, featureset, extra):
+        pass
+
+    def do_featureset_makefile(self, makefile, arch, featureset, makeflags, extra):
+        makeflags['FEATURESET'] = featureset
+
+        for i in self.makefile_targets:
+            target1 = '_'.join((i, arch))
+            target2 = '_'.join((target1, featureset))
+            target3 = '_'.join((target2, 'real'))
+            makefile.add(target1, [target2])
+            makefile.add(target2, [target3])
+
+    def do_featureset_packages(self, packages, makefile, arch, featureset, vars, makeflags, extra):
+        pass
+
+    def do_featureset_recurse(self, packages, makefile, arch, featureset, vars, makeflags, extra):
+        for flavour in self.config['base', arch, featureset]['flavours']:
+            self.do_flavour(packages, makefile, arch, featureset, flavour, vars.copy(), makeflags.copy(), extra)
+
+    def do_flavour(self, packages, makefile, arch, featureset, flavour, vars, makeflags, extra):
+        config_base = self.config.merge('base', arch, featureset, flavour)
+
+        vars['localversion'] += '-' + flavour
+
+        self.do_flavour_setup(vars, makeflags, arch, featureset, flavour, extra)
+        self.do_flavour_makefile(makefile, arch, featureset, flavour, makeflags, extra)
+        self.do_flavour_packages(packages, makefile, arch, featureset, flavour, vars, makeflags, extra)
+
+    def do_flavour_setup(self, vars, makeflags, arch, featureset, flavour, extra):
+        for i in (
+            ('kernel-arch', 'KERNEL_ARCH'),
+            ('localversion', 'LOCALVERSION'),
+        ):  
+            if i[0] in vars:
+                makeflags[i[1]] = vars[i[0]]
+
+    def do_flavour_makefile(self, makefile, arch, featureset, flavour, makeflags, extra):
+        makeflags['FLAVOUR'] = flavour
+
+        for i in self.makefile_targets:
+            target1 = '_'.join((i, arch, featureset))
+            target2 = '_'.join((target1, flavour))
+            target3 = '_'.join((target2, 'real'))
+            makefile.add(target1, [target2])
+            makefile.add(target2, [target3])
+
+    def do_flavour_packages(self, packages, makefile, arch, featureset, flavour, vars, makeflags, extra):
+        pass
+
+    def process_relation(self, dep, vars):
+        import copy
+        dep = copy.deepcopy(dep)
+        for groups in dep:
+            for item in groups:
+                item.name = self.substitute(item.name, vars)
+                if item.version:
+                    item.version = self.substitute(item.version, vars)
+        return dep
+
+    def process_description(self, in_desc, vars):
+        desc = in_desc.__class__()
+        desc.short = self.substitute(in_desc.short, vars)
+        for i in in_desc.long:
+            desc.append(self.substitute(i, vars))
+        return desc
+
+    def process_package(self, in_entry, vars={}):
+        entry = in_entry.__class__()
+        for key, value in in_entry.items():
+            if isinstance(value, PackageRelation):
+                value = self.process_relation(value, vars)
+            elif isinstance(value, PackageDescription):
+                value = self.process_description(value, vars)
+            else:
+                value = self.substitute(value, vars)
+            entry[key] = value
+        return entry
+
+    def process_packages(self, entries, vars):
+        return [self.process_package(i, vars) for i in entries]
+
+    def substitute(self, s, vars):
+        if isinstance(s, (list, tuple)):
+            return [self.substitute(i, vars) for i in s]
+
+        def subst(match):
+            return vars[match.group(1)]
+
+        return re.sub(r'@([-_a-z0-9]+)@', subst, str(s))
+
+    def write(self, packages, makefile):
+        self.write_control(packages.values())
+        self.write_makefile(makefile)
+
+    def write_config(self):
+        f = file("debian/config.dump", 'w')
+        self.config.write(f)
+        f.close()
+
+    def write_control(self, list):
+        self.write_rfc822(codecs.open("debian/control", 'w', 'utf-8'), list)
+
+    def write_makefile(self, makefile):
+        f = open("debian/rules.gen", 'w')
+        makefile.write(f)
+        f.close()
+
+    def write_rfc822(self, f, list):
+        for entry in list:
+            for key, value in entry.items():
+                f.write(u"%s: %s\n" % (key, value))
+            f.write('\n')
+
+def merge_packages(packages, new, arch):
+    for new_package in new:
+        name = new_package['Package']
+        if name in packages:
+            package = packages.get(name)
+            package['Architecture'].add(arch)
+
+            for field in 'Depends', 'Provides', 'Suggests', 'Recommends', 'Conflicts':
+                if field in new_package:
+                    if field in package:
+                        v = package[field]
+                        v.extend(new_package[field])
+                    else:
+                        package[field] = new_package[field]
+
+        else:
+            new_package['Architecture'] = arch
+            packages.append(new_package)
diff --git a/lib/python/debian_linux/kconfig.py b/lib/python/debian_linux/kconfig.py
new file mode 100644 (file)
index 0000000..67309e3
--- /dev/null
@@ -0,0 +1,91 @@
+from collections import OrderedDict
+
+__all__ = (
+    "KconfigFile",
+)
+
+
+class KConfigEntry(object):
+    __slots__ = 'name', 'value', 'comments'
+
+    def __init__(self, name, value, comments=None):
+        self.name, self.value = name, value
+        self.comments = comments or []
+
+    def __eq__(self, other):
+        return self.name == other.name and self.value == other.value
+
+    def __hash__(self):
+        return hash(self.name) | hash(self.value)
+
+    def __repr__(self):
+        return '<{}({!r}, {!r}, {!r})>'.format(self.__class__.__name__, self.name, self.value, self.comments)
+
+    def __str__(self):
+        return 'CONFIG_{}={}'.format(self.name, self.value)
+
+    def write(self):
+        for comment in self.comments:
+            yield '#. ' + comment
+        yield str(self)
+
+
+class KConfigEntryTristate(KConfigEntry):
+    __slots__ = ()
+
+    VALUE_NO = False
+    VALUE_YES = True
+    VALUE_MOD = object()
+
+    def __init__(self, name, value, comments=None):
+        if value == 'n' or value is None:
+            value = self.VALUE_NO
+        elif value == 'y':
+            value = self.VALUE_YES
+        elif value == 'm':
+            value = self.VALUE_MOD
+        else:
+            raise NotImplementedError
+        super(KConfigEntryTristate, self).__init__(name, value, comments)
+
+    def __str__(self):
+        if self.value is self.VALUE_MOD:
+            return 'CONFIG_{}=m'.format(self.name)
+        if self.value:
+            return 'CONFIG_{}=y'.format(self.name)
+        return '# CONFIG_{} is not set'.format(self.name)
+
+
+class KconfigFile(OrderedDict):
+    def __str__(self):
+        ret = []
+        for i in self.str_iter():
+            ret.append(i)
+        return '\n'.join(ret) + '\n'
+
+    def read(self, f):
+        for line in iter(f.readlines()):
+            line = line.strip()
+            if line.startswith("CONFIG_"):
+                i = line.find('=')
+                option = line[7:i]
+                value = line[i + 1:]
+                self.set(option, value)
+            elif line.startswith("# CONFIG_"):
+                option = line[9:-11]
+                self.set(option, 'n')
+            elif line.startswith("#") or not line:
+                pass
+            else:
+                raise RuntimeError("Can't recognize %s" % line)
+
+    def set(self, key, value):
+        if value in ('y', 'm', 'n'):
+            entry = KConfigEntryTristate(key, value)
+        else:
+            entry = KConfigEntry(key, value)
+        self[key] = entry
+
+    def str_iter(self):
+        for key, value in self.items():
+            yield str(value)
diff --git a/lib/python/debian_linux/patches.py b/lib/python/debian_linux/patches.py
new file mode 100644 (file)
index 0000000..984e48f
--- /dev/null
@@ -0,0 +1,180 @@
+from __future__ import print_function
+
+import glob
+import os
+import shutil
+import subprocess
+
+
+class Operation(object):
+    def __init__(self, name, data):
+        self.name, self.data = name, data
+
+    def __call__(self, dir='.', reverse=False):
+        try:
+            if not reverse:
+                self.do(dir)
+            else:
+                self.do_reverse(dir)
+            self._log(True)
+        except:
+            self._log(False)
+            raise
+
+    def _log(self, result):
+        if result:
+            s = "OK"
+        else:
+            s = "FAIL"
+        print("""  (%s) %-4s %s""" % (self.operation, s, self.name))
+
+    def do(self, dir):
+        raise NotImplementedError
+
+    def do_reverse(self, dir):
+        raise NotImplementedError
+
+
+class OperationPatch(Operation):
+    def __init__(self, name, filename, data):
+        super(OperationPatch, self).__init__(name, data)
+        self.filename = filename
+
+    def _call(self, dir, *extraargs):
+        with open(self.filename) as f:
+            subprocess.check_call(
+                    ("patch", "-p1", "-f", "-s", "-t", "--no-backup-if-mismatch") + extraargs,
+                    cwd=dir,
+                    stdin=f,
+            )
+
+    def patch_push(self, dir):
+        self._call(dir, '--fuzz=1')
+
+    def patch_pop(self, dir):
+        self._call(dir, '-R')
+
+
+class OperationPatchPush(OperationPatch):
+    operation = '+'
+
+    do = OperationPatch.patch_push
+    do_reverse = OperationPatch.patch_pop
+
+
+class OperationPatchPop(OperationPatch):
+    operation = '-'
+
+    do = OperationPatch.patch_pop
+    do_reverse = OperationPatch.patch_push
+
+
+class SubOperation(Operation):
+    def _log(self, result):
+        if result:
+            s = "OK"
+        else:
+            s = "FAIL"
+        print("""    %-10s %-4s %s""" % ('(%s)' % self.operation, s, self.name))
+
+
+class SubOperationFilesRemove(SubOperation):
+    operation = "remove"
+
+    def do(self, dir):
+        name = os.path.join(dir, self.name)
+        for n in glob.iglob(name):
+            if os.path.isdir(n):
+                shutil.rmtree(n)
+            else:
+                os.unlink(n)
+
+
+class SubOperationFilesUnifdef(SubOperation):
+    operation = "unifdef"
+
+    def do(self, dir):
+        filename = os.path.join(dir, self.name)
+        ret = subprocess.call(("unifdef", "-o", filename, filename) + tuple(self.data))
+        if ret == 0:
+            raise RuntimeError("unifdef of %s removed nothing" % self.name)
+        elif ret != 1:
+            raise RuntimeError("unifdef failed")
+
+
+class OperationFiles(Operation):
+    operation = 'X'
+
+    suboperations = {
+        'remove': SubOperationFilesRemove,
+        'rm': SubOperationFilesRemove,
+        'unifdef': SubOperationFilesUnifdef,
+    }
+
+    def __init__(self, name, filename, data):
+        super(OperationFiles, self).__init__(name, data)
+
+        ops = []
+
+        with open(filename) as f:
+            for line in f:
+                line = line.strip()
+                if not line or line[0] == '#':
+                    continue
+
+                items = line.split()
+                operation, filename = items[:2]
+                data = items[2:]
+
+                if operation not in self.suboperations:
+                    raise RuntimeError('Undefined operation "%s" in series %s' % (operation, name))
+
+                ops.append(self.suboperations[operation](filename, data))
+
+        self.ops = ops
+
+    def do(self, dir):
+        for i in self.ops:
+            i(dir=dir)
+
+
+class PatchSeries(list):
+    operations = {
+        '+': OperationPatchPush,
+        '-': OperationPatchPop,
+        'X': OperationFiles,
+    }
+
+    def __init__(self, name, root, fp):
+        self.name, self.root = name, root
+
+        for line in fp:
+            line = line.strip()
+
+            if not len(line) or line[0] == '#':
+                continue
+
+            items = line.split(' ')
+            operation, filename = items[:2]
+            data = items[2:]
+
+            if operation in self.operations:
+                f = os.path.join(self.root, filename)
+                if os.path.exists(f):
+                    self.append(self.operations[operation](filename, f, data))
+                else:
+                    raise RuntimeError("Can't find patch %s for series %s" % (filename, self.name))
+            else:
+                raise RuntimeError('Undefined operation "%s" in series %s' % (operation, name))
+
+    def __call__(self, cond=bool, dir='.', reverse=False):
+        if not reverse:
+            l = self
+        else:
+            l = self[::-1]
+        for i in l:
+            if cond(i):
+                i(dir=dir, reverse=reverse)
+
+    def __repr__(self):
+        return '<%s object for %s>' % (self.__class__.__name__, self.name)
diff --git a/lib/python/debian_linux/utils.py b/lib/python/debian_linux/utils.py
new file mode 100644 (file)
index 0000000..5d6a7d4
--- /dev/null
@@ -0,0 +1,93 @@
+import codecs
+import os
+import re
+import textwrap
+
+
+class Templates(object):
+    def __init__(self, dirs=["debian/templates"]):
+        self.dirs = dirs
+
+        self._cache = {}
+
+    def __getitem__(self, key):
+        ret = self.get(key)
+        if ret is not None:
+            return ret
+        raise KeyError(key)
+
+    def _read(self, name):
+        prefix, id = name.split('.', 1)
+
+        for suffix in ['.in', '']:
+            for dir in self.dirs:
+                filename = "%s/%s%s" % (dir, name, suffix)
+                if os.path.exists(filename):
+                    f = codecs.open(filename, 'r', 'utf-8')
+                    if prefix == 'control':
+                        return read_control(f)
+                    if prefix == 'tests-control':
+                        return read_tests_control(f)
+                    return f.read()
+
+    def get(self, key, default=None):
+        if key in self._cache:
+            return self._cache[key]
+
+        value = self._cache.setdefault(key, self._read(key))
+        if value is None:
+            return default
+        return value
+
+
+def read_control(f):
+    from .debian import Package
+    return _read_rfc822(f, Package)
+
+def read_tests_control(f):
+    from .debian import TestsControl
+    return _read_rfc822(f, TestsControl)
+
+def _read_rfc822(f, cls):
+    entries = []
+    eof = False
+
+    while not eof:
+        e = cls()
+        last = None
+        lines = []
+        while True:
+            line = f.readline()
+            if not line:
+                eof = True
+                break
+            # Strip comments rather than trying to preserve them
+            if line[0] == '#':
+                continue
+            line = line.strip('\n')
+            if not line:
+                break
+            if line[0] in ' \t':
+                if not last:
+                    raise ValueError('Continuation line seen before first header')
+                lines.append(line.lstrip())
+                continue
+            if last:
+                e[last] = '\n'.join(lines)
+            i = line.find(':')
+            if i < 0:
+                raise ValueError(u"Not a header, not a continuation: ``%s''" % line)
+            last = line[:i]
+            lines = [line[i + 1:].lstrip()]
+        if last:
+            e[last] = '\n'.join(lines)
+        if e:
+            entries.append(e)
+
+    return entries
+
+
+class TextWrapper(textwrap.TextWrapper):
+    wordsep_re = re.compile(
+        r'(\s+|'                                  # any whitespace
+        r'(?<=[\w\!\"\'\&\.\,\?])-{2,}(?=\w))')   # em-dash
diff --git a/lib/python/debian_xen/__init__.py b/lib/python/debian_xen/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lib/python/debian_xen/debian.py b/lib/python/debian_xen/debian.py
new file mode 100644 (file)
index 0000000..7c6c47d
--- /dev/null
@@ -0,0 +1,52 @@
+import re
+from debian_linux.debian import Version
+
+
+class VersionXen(Version):
+    _version_xen_rules = r"""
+        ^
+        (?P<major>\d+)\.(?P<minor>\d+)(?:\.(?P<patch>\d+))?
+        (?:
+         ~pre(?:\+\d+\.(?P<pre_commit>[0-9a-f]{10}))
+         |
+         ~rc(?P<rc>\d+)(?:\+\d+\.(?P<rc_commit>[0-9a-f]{10}))?
+        )?
+        -
+        (?P<debian_revision>[^-]+)
+        $
+        """
+    _version_xen_re = re.compile(_version_xen_rules, re.X)
+
+    def __init__(self, version):
+        super(VersionXen, self).__init__(version)
+        match = self._version_xen_re.match(version)
+        if match is None:
+            raise ValueError("Invalid debian xen version")
+        d = match.groupdict()
+        self.major = d['major']
+        self.minor = d['minor']
+        self.xen_version = '%s.%s' % (self.major, self.minor)
+        self.patch = d['patch']
+        self.pre_commit = d['pre_commit']
+        self.rc_commit = d['rc_commit']
+        self.rc = d['rc']
+        self.debian_revision = d['debian_revision']
+
+        # Now find out which treeish in the upstream source we need to build
+        # the orig tar from.
+
+        # 1. pre version in between stable releases with explicit commit
+        # e.g. 4.10.2~pre+1.25e0657ed4-1
+        if self.pre_commit is not None:
+            self.treeish = self.pre_commit
+        # 2. explicit commit while in rc
+        # e.g. 4.11.0~rc6+1.35fcb982ea-1~exp1
+        elif self.rc_commit is not None:
+            self.treeish = self.rc_commit
+        # 3. release candidate
+        # e.g. 4.11.0~rc7-1~exp1
+        elif self.rc is not None:
+            self.treeish = '%s.%s.%s-rc%s' % (self.major, self.minor, self.patch, self.rc)
+        # 4. regular release, like 4.10.2 -> tag RELEASE-4.10.2
+        else:
+            self.treeish = 'RELEASE-%s.%s.%s' % (self.major, self.minor, self.patch)
diff --git a/libxen-dev.install b/libxen-dev.install
new file mode 100644 (file)
index 0000000..473a915
--- /dev/null
@@ -0,0 +1,46 @@
+usr/lib/*/libxenctrl.a
+usr/lib/*/libxenctrl.so
+usr/lib/*/libxenguest.a
+usr/lib/*/libxenguest.so
+usr/lib/*/libxenlight.a
+usr/lib/*/libxenlight.so
+usr/lib/*/libxenstore.a
+usr/lib/*/libxenstore.so
+usr/lib/*/libxlutil.a
+usr/lib/*/libxlutil.so
+usr/lib/*/libxencall.a
+usr/lib/*/libxencall.so
+usr/lib/*/libxenevtchn.a
+usr/lib/*/libxenevtchn.so
+usr/lib/*/libxenforeignmemory.a
+usr/lib/*/libxenforeignmemory.so
+usr/lib/*/libxengnttab.a
+usr/lib/*/libxengnttab.so
+usr/lib/*/libxentoollog.a
+usr/lib/*/libxentoollog.so
+usr/lib/*/libxendevicemodel.a
+usr/lib/*/libxendevicemodel.so
+usr/lib/*/libxentoolcore.a
+usr/lib/*/libxentoolcore.so
+usr/include/_libxl*.h
+usr/include/libxl*.h
+usr/include/xenctrl.h
+usr/include/xenguest.h
+usr/include/xenstore*.h
+usr/include/xenstore-compat/xs* usr/include
+usr/include/xentoolcore.h
+usr/include/xentoollog.h
+usr/include/xendevicemodel.h
+usr/include/xen
+usr/lib/*/pkgconfig/*.pc
+# New headers in xen-4.8
+#usr/include/fsimage_grub.h
+#usr/include/fsimage.h
+#usr/include/fsimage_plugin.h
+#usr/include/libxenvchan.h
+usr/include/xencall.h
+usr/include/xenctrl_compat.h
+usr/include/xenevtchn.h
+usr/include/xenforeignmemory.h
+usr/include/xengnttab.h
+usr/include/xenstat.h
diff --git a/libxenstore3.0.install b/libxenstore3.0.install
new file mode 100644 (file)
index 0000000..1d3fabc
--- /dev/null
@@ -0,0 +1,2 @@
+usr/lib/*/libxenstore.so.*
+usr/lib/*/libxentoolcore*.so.*
diff --git a/libxenstore3.0.symbols b/libxenstore3.0.symbols
new file mode 100644 (file)
index 0000000..508dfb4
--- /dev/null
@@ -0,0 +1,53 @@
+libxenstore.so.3.0 libxenstore3.0 #MINVER#
+ expanding_buffer_ensure@Base 3.2.0
+ sanitise_value@Base 3.2.0
+ unsanitise_value@Base 3.2.0
+ xprintf@Base 3.2.0
+ xs_check_watch@Base 4.2~
+ xs_close@Base 4.1.0~rc6
+ xs_control_command@Base 4.9.0
+ xs_count_strings@Base 3.2.0
+ xs_daemon_close@Base 3.2.0
+ xs_daemon_destroy_postfork@Base 4.0.1~rc4
+ xs_daemon_open@Base 3.2.0
+ xs_daemon_open_readonly@Base 3.2.0
+ xs_daemon_rootdir@Base 3.2.0
+ xs_daemon_rundir@Base 3.2.0
+ xs_daemon_socket@Base 3.2.0
+ xs_daemon_socket_ro@Base 3.2.0
+ xs_daemon_tdb@Base 3.2.0
+ xs_debug_command@Base 3.2.0
+ xs_directory@Base 3.2.0
+ xs_domain_dev@Base 3.2.0
+ xs_domain_open@Base 3.2.0
+ xs_fileno@Base 3.2.0
+ xs_get_domain_path@Base 3.2.0
+ xs_get_permissions@Base 3.2.0
+ xs_introduce_domain@Base 3.2.0
+ xs_is_domain_introduced@Base 3.2.0
+ xs_mkdir@Base 3.2.0
+ xs_open@Base 4.1.0~rc6
+ xs_path_is_subpath@Base 4.2~
+ xs_perm_to_string@Base 3.2.0
+ xs_read@Base 3.2.0
+ xs_read_watch@Base 3.2.0
+ xs_release_domain@Base 3.2.0
+ xs_restrict@Base 4.1.0~rc6
+ xs_resume_domain@Base 3.2.0
+ xs_rm@Base 3.2.0
+ xs_set_permissions@Base 3.2.0
+ xs_set_target@Base 3.4.0
+ xs_strings_to_perms@Base 3.2.0
+ xs_suspend_evtchn_port@Base 3.4.0
+ xs_transaction_end@Base 3.2.0
+ xs_transaction_start@Base 3.2.0
+ xs_unwatch@Base 3.2.0
+ xs_watch@Base 3.2.0
+ xs_write@Base 3.2.0
+ xs_write_all@Base 3.2.0
+libxentoolcore-4.10.so.1 libxenstore3.0 #MINVER#
+ VERS_1.0@VERS_1.0 4.10.0
+ xentoolcore__deregister_active_handle@VERS_1.0 4.10.0
+ xentoolcore__register_active_handle@VERS_1.0 4.10.0
+ xentoolcore__restrict_by_dup2_null@VERS_1.0 4.10.0
+ xentoolcore_restrict_all@VERS_1.0 4.10.0
diff --git a/patches/misc/tools-include-install.diff b/patches/misc/tools-include-install.diff
new file mode 100644 (file)
index 0000000..f19c066
--- /dev/null
@@ -0,0 +1,26 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:47:30 +0200
+Subject: tools-include-install.diff
+
+Patch-Name: tools-include-install.diff
+
+---
+
+--- a/tools/include/Makefile
++++ b/tools/include/Makefile
+@@ -14,7 +14,6 @@ xen-foreign:
+ xen/.dir:
+       @rm -rf xen
+       mkdir -p xen/libelf
+-      ln -sf $(XEN_ROOT)/xen/include/public/COPYING xen
+       ln -sf $(wildcard $(XEN_ROOT)/xen/include/public/*.h) xen
+       ln -sf $(addprefix $(XEN_ROOT)/xen/include/public/,arch-x86 arch-arm hvm io xsm) xen
+       ln -sf ../xen-sys/$(XEN_OS) xen/sys
+@@ -43,7 +42,6 @@ install: all
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)/xen/io
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)/xen/sys
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)/xen/xsm
+-      $(INSTALL_DATA) xen/COPYING $(DESTDIR)$(includedir)/xen
+       $(INSTALL_DATA) xen/*.h $(DESTDIR)$(includedir)/xen
+       $(INSTALL_DATA) xen/arch-x86/*.h $(DESTDIR)$(includedir)/xen/arch-x86
+       $(INSTALL_DATA) xen/arch-x86/hvm/*.h $(DESTDIR)$(includedir)/xen/arch-x86/hvm
diff --git a/patches/misc/tools-pygrub-remove-static-solaris-support b/patches/misc/tools-pygrub-remove-static-solaris-support
new file mode 100644 (file)
index 0000000..23e74a2
--- /dev/null
@@ -0,0 +1,82 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:47:29 +0200
+Subject: Remove static solaris support from pygrub
+
+Patch-Name: tools-pygrub-remove-static-solaris-support
+
+---
+
+--- a/tools/pygrub/src/pygrub
++++ b/tools/pygrub/src/pygrub
+@@ -16,7 +16,6 @@ import os, sys, string, struct, tempfile
+ import copy
+ import logging
+ import platform
+-import xen.lowlevel.xc
+ import curses, _curses, curses.wrapper, curses.textpad, curses.ascii
+ import getopt
+@@ -668,51 +667,6 @@ def run_grub(file, entry, fs, cfg_args):
+     return grubcfg
+-def supports64bitPVguest():
+-    xc = xen.lowlevel.xc.xc()
+-    caps = xc.xeninfo()['xen_caps'].split(" ")
+-    for cap in caps:
+-        if cap == "xen-3.0-x86_64":
+-            return True
+-    return False
+-
+-# If nothing has been specified, look for a Solaris domU. If found, perform the
+-# necessary tweaks.
+-def sniff_solaris(fs, cfg):
+-    if not fs.file_exists("/platform/i86xpv/kernel/unix") and \
+-       not fs.file_exists("/platform/i86xpv/kernel/amd64/unix"):
+-        return cfg
+-
+-    if not cfg["kernel"]:
+-        if supports64bitPVguest() and \
+-          fs.file_exists("/platform/i86xpv/kernel/amd64/unix"):
+-            cfg["kernel"] = "/platform/i86xpv/kernel/amd64/unix"
+-            cfg["ramdisk"] = "/platform/i86pc/amd64/boot_archive"
+-        elif fs.file_exists("/platform/i86xpv/kernel/unix"):
+-            cfg["kernel"] = "/platform/i86xpv/kernel/unix"
+-            cfg["ramdisk"] = "/platform/i86pc/boot_archive"
+-        else:
+-            return cfg
+-
+-    # Unpleasant. Typically we'll have 'root=foo -k' or 'root=foo /kernel -k',
+-    # and we need to maintain Xen properties (root= and ip=) and the kernel
+-    # before any user args.
+-    
+-    xenargs = ""
+-    userargs = ""
+-    
+-    if not cfg["args"]:
+-        cfg["args"] = cfg["kernel"]
+-    else:
+-        for arg in cfg["args"].split():
+-            if re.match("^root=", arg) or re.match("^ip=", arg):
+-                xenargs += arg + " "
+-            elif arg != cfg["kernel"]:
+-                userargs += arg + " "
+-        cfg["args"] = xenargs + " " + cfg["kernel"] + " " + userargs
+-
+-    return cfg
+- 
+ def sniff_netware(fs, cfg):
+     if not fs.file_exists("/nwserver/xnloader.sys"):
+         return cfg
+@@ -901,10 +855,7 @@ if __name__ == "__main__":
+         try:
+             fs = fsimage.open(file, offset, bootfsoptions)
+-            chosencfg = sniff_solaris(fs, incfg)
+-
+-            if not chosencfg["kernel"]:
+-                chosencfg = sniff_netware(fs, incfg)
++            chosencfg = sniff_netware(fs, incfg)
+             if not chosencfg["kernel"]:
+                 chosencfg = run_grub(file, entry, fs, incfg["args"])
diff --git a/patches/misc/tools-xenmon-install.diff b/patches/misc/tools-xenmon-install.diff
new file mode 100644 (file)
index 0000000..e9120bf
--- /dev/null
@@ -0,0 +1,21 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:47:31 +0200
+Subject: tools-xenmon-install.diff
+
+Patch-Name: tools-xenmon-install.diff
+
+---
+
+--- a/tools/xenmon/Makefile
++++ b/tools/xenmon/Makefile
+@@ -13,6 +13,10 @@
+ XEN_ROOT=$(CURDIR)/../..
+ include $(XEN_ROOT)/tools/Rules.mk
++DEFAULT_PYTHON_PATH := $(shell $(XEN_ROOT)/tools/python/get-path)
++PYTHON_PATH ?= $(DEFAULT_PYTHON_PATH)
++INSTALL_PYTHON_PROG = $(XEN_ROOT)/tools/python/install-wrap "$(PYTHON_PATH)" $(INSTALL_PROG)
++
+ CFLAGS  += -Werror
+ CFLAGS  += $(CFLAGS_libxenevtchn)
+ CFLAGS  += $(CFLAGS_libxenctrl)
diff --git a/patches/misc/tools-xentop-replace-use-of-deprecated-vwprintw.patch b/patches/misc/tools-xentop-replace-use-of-deprecated-vwprintw.patch
new file mode 100644 (file)
index 0000000..367548e
--- /dev/null
@@ -0,0 +1,35 @@
+From 754457cf86fd952cab83534f0a2db14eddaecca2 Mon Sep 17 00:00:00 2001
+From: Christopher Clark <christopher.w.clark@gmail.com>
+Date: Wed, 18 Jul 2018 15:22:17 -0700
+Subject: [PATCH] tools/xentop : replace use of deprecated vwprintw
+
+gcc-8.1 complains:
+
+| xentop.c: In function 'print':
+| xentop.c:304:4: error: 'vwprintw' is deprecated [-Werror=deprecated-declarations]
+|     vwprintw(stdscr, (curses_str_t)fmt, args);
+|     ^~~~~~~~
+
+vw_printw (note the underscore) is a non-deprecated alternative.
+
+Signed-off-by: Christopher Clark <christopher.clark6@baesystems.com>
+---
+ tools/xenstat/xentop/xentop.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/xenstat/xentop/xentop.c b/tools/xenstat/xentop/xentop.c
+index 2fd2b6742e..c46581062b 100644
+--- a/tools/xenstat/xentop/xentop.c
++++ b/tools/xenstat/xentop/xentop.c
+@@ -301,7 +301,7 @@ static void print(const char *fmt, ...)
+       if (!batch) {
+               if((current_row() < lines()-1)) {
+                       va_start(args, fmt);
+-                      vwprintw(stdscr, (curses_str_t)fmt, args);
++                      vw_printw(stdscr, (curses_str_t)fmt, args);
+                       va_end(args);
+               }
+       } else {
+-- 
+2.18.0
+
diff --git a/patches/misc/toolstestsx86_emulator-pass--no-pie--fno.patch b/patches/misc/toolstestsx86_emulator-pass--no-pie--fno.patch
new file mode 100644 (file)
index 0000000..62019c5
--- /dev/null
@@ -0,0 +1,47 @@
+From: Ian Jackson <ian.jackson@citrix.com>
+Date: Tue, 1 Nov 2016 16:20:27 +0000
+Subject: tools/tests/x86_emulator: Pass -no-pie -fno-pic to gcc on x86_32
+
+The current build fails with GCC6 on Debian sid i386 (unstable):
+
+ /tmp/ccqjaueF.s: Assembler messages:
+ /tmp/ccqjaueF.s:3713: Error: missing or invalid displacement expression `vmovd_to_reg_len@GOT'
+
+This is due to the combination of GCC6, and Debian's decision to
+enable some hardening flags by default (to try to make runtime
+addresses less predictable):
+  https://wiki.debian.org/Hardening/PIEByDefaultTransition
+
+This is of no benefit for the x86 instruction emulator test, which is
+a rebuild of the emulator code for testing purposes only.  So pass
+options to disable this.
+
+These options will be no-ops if they are the same as the compiler
+default.
+
+On amd64, the -fno-pic breaks the build in a different way.  So do
+this only on i386.
+
+Signed-off-by: Ian Jackson <ian.jackson@citrix.com>
+CC: Jan Beulich <jbeulich@suse.com>
+CC: Andrew Cooper <andrew.cooper3@citrix.com>
+
+squash! tools/tests/x86_emulator: Pass -no-pie -fno-pic to gcc
+
+Signed-off-by: Ian Jackson <ian.jackson@citrix.com>
+
+---
+
+--- a/tools/tests/x86_emulator/Makefile
++++ b/tools/tests/x86_emulator/Makefile
+@@ -140,6 +140,10 @@ HOSTCFLAGS-x86_64 := -fno-PIE
+ $(call cc-option-add,HOSTCFLAGS-x86_64,HOSTCC,-no-pie)
+ HOSTCFLAGS += $(CFLAGS_xeninclude) -I. $(HOSTCFLAGS-$(XEN_COMPILE_ARCH))
++ifeq ($(XEN_TARGET_ARCH),x86_32)
++HOSTCFLAGS += -no-pie -fno-pic
++endif
++
+ x86.h := asm/x86-vendors.h asm/x86-defns.h asm/msr-index.h
+ x86_emulate.h := x86-emulate.h x86_emulate/x86_emulate.h $(x86.h)
diff --git a/patches/misc/version.diff b/patches/misc/version.diff
new file mode 100644 (file)
index 0000000..7178674
--- /dev/null
@@ -0,0 +1,147 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:46:43 +0200
+Subject: version
+
+Patch-Name: version.diff
+
+---
+
+--- a/xen/Makefile
++++ b/xen/Makefile
+@@ -161,7 +161,7 @@ delete-unfresh-files:
+       @mv -f $@.tmp $@
+ # compile.h contains dynamic build info. Rebuilt on every 'make' invocation.
+-include/xen/compile.h: include/xen/compile.h.in .banner
++include/xen/compile.h: include/xen/compile.h.in
+       @sed -e 's/@@date@@/$(XEN_BUILD_DATE)/g' \
+           -e 's/@@time@@/$(XEN_BUILD_TIME)/g' \
+           -e 's/@@whoami@@/$(XEN_WHOAMI)/g' \
+@@ -172,9 +172,11 @@ include/xen/compile.h: include/xen/compi
+           -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \
+           -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \
+           -e 's!@@changeset@@!$(shell tools/scmversion $(XEN_ROOT) || echo "unavailable")!g' \
++          -e 's/@@system_distribution@@/$(shell lsb_release -is)/g' \
++          -e 's/@@system_maintainer_domain@@/$(shell cd ../../../..; dpkg-parsechangelog | sed -ne 's,^Maintainer: .[^<]*<[^@>]*@\([^>]*\)>,\1,p')/g' \
++          -e 's/@@system_maintainer_local@@/$(shell cd ../../../..; dpkg-parsechangelog | sed -ne 's,^Maintainer: .[^<]*<\([^@>]*\)@.*>,\1,p')/g' \
++          -e 's/@@system_version@@/$(shell cd ../../../..; dpkg-parsechangelog | awk '/^Version:/ {print $$2}')/g' \
+           < include/xen/compile.h.in > $@.new
+-      @cat .banner
+-      @$(PYTHON) tools/fig-to-oct.py < .banner >> $@.new
+       @mv -f $@.new $@
+ include/asm-$(TARGET_ARCH)/asm-offsets.h: arch/$(TARGET_ARCH)/asm-offsets.s
+--- a/xen/common/kernel.c
++++ b/xen/common/kernel.c
+@@ -357,8 +357,8 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDL
+         memset(&info, 0, sizeof(info));
+         safe_strcpy(info.compiler,       deny ? xen_deny() : xen_compiler());
+-        safe_strcpy(info.compile_by,     deny ? xen_deny() : xen_compile_by());
+-        safe_strcpy(info.compile_domain, deny ? xen_deny() : xen_compile_domain());
++        safe_strcpy(info.compile_by,     deny ? xen_deny() : xen_compile_system_maintainer_local());
++        safe_strcpy(info.compile_domain, deny ? xen_deny() : xen_compile_system_maintainer_domain());
+         safe_strcpy(info.compile_date,   deny ? xen_deny() : xen_compile_date());
+         if ( copy_to_guest(arg, &info, 1) )
+             return -EFAULT;
+--- a/xen/common/version.c
++++ b/xen/common/version.c
+@@ -20,19 +20,24 @@ const char *xen_compile_time(void)
+     return XEN_COMPILE_TIME;
+ }
+-const char *xen_compile_by(void)
++const char *xen_compile_system_distribution(void)
+ {
+-    return XEN_COMPILE_BY;
++    return XEN_COMPILE_SYSTEM_DISTRIBUTION;
+ }
+-const char *xen_compile_domain(void)
++const char *xen_compile_system_maintainer_local(void)
+ {
+-    return XEN_COMPILE_DOMAIN;
++    return XEN_COMPILE_SYSTEM_MAINTAINER_LOCAL;
+ }
+-const char *xen_compile_host(void)
++const char *xen_compile_system_maintainer_domain(void)
+ {
+-    return XEN_COMPILE_HOST;
++    return XEN_COMPILE_SYSTEM_MAINTAINER_DOMAIN;
++}
++
++const char *xen_compile_system_version(void)
++{
++    return XEN_COMPILE_SYSTEM_VERSION;
+ }
+ const char *xen_compiler(void)
+@@ -60,11 +65,6 @@ const char *xen_changeset(void)
+     return XEN_CHANGESET;
+ }
+-const char *xen_banner(void)
+-{
+-    return XEN_BANNER;
+-}
+-
+ const char *xen_deny(void)
+ {
+     return "<denied>";
+--- a/xen/drivers/char/console.c
++++ b/xen/drivers/char/console.c
+@@ -842,14 +842,11 @@ void __init console_init_preirq(void)
+     pv_console_set_rx_handler(serial_rx);
+     /* HELLO WORLD --- start-of-day banner text. */
+-    spin_lock(&console_lock);
+-    __putstr(xen_banner());
+-    spin_unlock(&console_lock);
+-    printk("Xen version %d.%d%s (%s@%s) (%s) debug=%c " gcov_string " %s\n",
++    printk("Xen version %d.%d%s (%s %s) (%s@%s) (%s) debug=%c " gcov_string " %s\n",
+            xen_major_version(), xen_minor_version(), xen_extra_version(),
+-           xen_compile_by(), xen_compile_domain(),
++           xen_compile_system_distribution(), xen_compile_system_version(),
++           xen_compile_system_maintainer_local(), xen_compile_system_maintainer_domain(),
+            xen_compiler(), debug_build() ? 'y' : 'n', xen_compile_date());
+-    printk("Latest ChangeSet: %s\n", xen_changeset());
+     if ( opt_sync_console )
+     {
+--- a/xen/include/xen/compile.h.in
++++ b/xen/include/xen/compile.h.in
+@@ -1,8 +1,9 @@
+ #define XEN_COMPILE_DATE      "@@date@@"
+ #define XEN_COMPILE_TIME      "@@time@@"
+-#define XEN_COMPILE_BY                "@@whoami@@"
+-#define XEN_COMPILE_DOMAIN    "@@domain@@"
+-#define XEN_COMPILE_HOST      "@@hostname@@"
++#define XEN_COMPILE_SYSTEM_DISTRIBUTION               "@@system_distribution@@"
++#define XEN_COMPILE_SYSTEM_MAINTAINER_DOMAIN  "@@system_maintainer_domain@@"
++#define XEN_COMPILE_SYSTEM_MAINTAINER_LOCAL   "@@system_maintainer_local@@"
++#define XEN_COMPILE_SYSTEM_VERSION            "@@system_version@@"
+ #define XEN_COMPILER          "@@compiler@@"
+ #define XEN_VERSION           @@version@@
+@@ -10,4 +11,3 @@
+ #define XEN_EXTRAVERSION      "@@extraversion@@"
+ #define XEN_CHANGESET         "@@changeset@@"
+-#define XEN_BANNER            \
+--- a/xen/include/xen/version.h
++++ b/xen/include/xen/version.h
+@@ -6,9 +6,10 @@
+ const char *xen_compile_date(void);
+ const char *xen_compile_time(void);
+-const char *xen_compile_by(void);
+-const char *xen_compile_domain(void);
+-const char *xen_compile_host(void);
++const char *xen_compile_system_distribution(void);
++const char *xen_compile_system_maintainer_domain(void);
++const char *xen_compile_system_maintainer_local(void);
++const char *xen_compile_system_version(void);
+ const char *xen_compiler(void);
+ unsigned int xen_major_version(void);
+ unsigned int xen_minor_version(void);
diff --git a/patches/prefix-abiname/config-prefix.diff b/patches/prefix-abiname/config-prefix.diff
new file mode 100644 (file)
index 0000000..d3ab54b
--- /dev/null
@@ -0,0 +1,29 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:46:45 +0200
+Subject: config-prefix.diff
+
+Patch-Name: config-prefix.diff
+
+---
+
+--- a/Config.mk
++++ b/Config.mk
+@@ -83,7 +83,7 @@ EXTRA_LIB += $(EXTRA_PREFIX)/lib
+ endif
+ PYTHON      ?= python
+-PYTHON_PREFIX_ARG ?= --prefix="$(prefix)"
++PYTHON_PREFIX_ARG ?= --home="$(LIBEXEC)"
+ # The above requires that prefix contains *no spaces*. This variable is here
+ # to permit the user to set PYTHON_PREFIX_ARG to '' to workaround this bug:
+ #  https://bugs.launchpad.net/ubuntu/+bug/362570
+--- a/config/Paths.mk.in
++++ b/config/Paths.mk.in
+@@ -13,6 +13,7 @@
+ # http://wiki.xen.org/wiki/Category:Host_Configuration#System_wide_xen_configuration
+ PACKAGE_TARNAME          := @PACKAGE_TARNAME@
++PACKAGE_VERSION          := @PACKAGE_VERSION@
+ prefix                   := @prefix@
+ bindir                   := @bindir@
+ sbindir                  := @sbindir@
diff --git a/patches/prefix-abiname/tools-blktap2-prefix.diff b/patches/prefix-abiname/tools-blktap2-prefix.diff
new file mode 100644 (file)
index 0000000..d6ea7da
--- /dev/null
@@ -0,0 +1,171 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:46:53 +0200
+Subject: tools-blktap2-prefix.diff
+
+Patch-Name: tools-blktap2-prefix.diff
+
+---
+
+--- a/tools/blktap2/control/Makefile
++++ b/tools/blktap2/control/Makefile
+@@ -1,10 +1,7 @@
+ XEN_ROOT := $(CURDIR)/../../../
+ include $(XEN_ROOT)/tools/Rules.mk
+-MAJOR              = 1.0
+-MINOR              = 0
+ LIBNAME            = libblktapctl
+-LIBSONAME          = $(LIBNAME).so.$(MAJOR)
+ IBIN               = tap-ctl
+@@ -38,11 +35,11 @@ OBJS = $(CTL_OBJS) tap-ctl.o
+ PICS = $(CTL_PICS)
+ LIB_STATIC = $(LIBNAME).a
+-LIB_SHARED = $(LIBSONAME).$(MINOR)
++LIB_SHARED = $(LIBNAME).so
+ IBIN = tap-ctl
+ PKG_CONFIG := xenblktapctl.pc
+-PKG_CONFIG_VERSION := $(MAJOR).$(MINOR)
++PKG_CONFIG_VERSION := $(PACKAGE_VERSION)
+ ifneq ($(CONFIG_LIBXC_MINIOS),y)
+ PKG_CONFIG_INST := $(PKG_CONFIG)
+@@ -62,43 +59,34 @@ all: build
+ build: $(IBIN) $(LIB_STATIC) $(LIB_SHARED) $(PKG_CONFIG_INST) $(PKG_CONFIG_LOCAL)
+-$(LIBNAME).so: $(LIBSONAME)
+-      ln -sf $< $@
+-
+-$(LIBSONAME): $(LIB_SHARED)
+-      ln -sf $< $@
+-
+ tap-ctl: tap-ctl.o $(LIBNAME).so
+-      $(CC) $(LDFLAGS) -o $@ $^ $(APPEND_LDFLAGS)
++      $(CC) $(LDFLAGS) $(call LDFLAGS_RPATH,../lib) -o $@ $^ $(APPEND_LDFLAGS)
+ $(LIB_STATIC): $(CTL_OBJS)
+       $(AR) r $@ $^
+ $(LIB_SHARED): $(CTL_PICS)
+-      $(CC) $(LDFLAGS) -fPIC  -Wl,$(SONAME_LDFLAG) -Wl,$(LIBSONAME) $(SHLIB_LDFLAGS) -rdynamic $^ -o $@  $(APPEND_LDFLAGS)
++      $(CC) $(LDFLAGS) -fPIC  $(SHLIB_LDFLAGS) -rdynamic $^ -o $@  $(APPEND_LDFLAGS)
+ install: build
+-      $(INSTALL_DIR) -p $(DESTDIR)$(sbindir)
+-      $(INSTALL_PROG) $(IBIN) $(DESTDIR)$(sbindir)
++      $(INSTALL_DIR) -p $(DESTDIR)$(libdir)
++      $(INSTALL_DIR) -p $(DESTDIR)$(LIBEXEC_BIN)
++      $(INSTALL_DIR) -p $(DESTDIR)$(LIBEXEC_LIB)
++      $(INSTALL_PROG) $(IBIN) $(DESTDIR)$(LIBEXEC_BIN)
+       $(INSTALL_DATA) $(LIB_STATIC) $(DESTDIR)$(libdir)
+-      $(INSTALL_PROG) $(LIB_SHARED) $(DESTDIR)$(libdir)
+-      ln -sf $(LIBSONAME) $(DESTDIR)$(libdir)/$(LIBNAME).so
+-      ln -sf $(LIB_SHARED) $(DESTDIR)$(libdir)/$(LIBSONAME)
++      $(INSTALL_PROG) $(LIB_SHARED) $(DESTDIR)$(LIBEXEC_LIB)
+       $(INSTALL_DATA) xenblktapctl.pc $(DESTDIR)$(PKG_INSTALLDIR)
+ clean:
+       rm -f $(OBJS) $(PICS) $(DEPS_RM) $(IBIN) $(LIB_STATIC) $(LIB_SHARED)
+-      rm -f $(LIBNAME).so $(LIBSONAME)
+       rm -f *~
+       rm -f xenblktapctl.pc
+ uninstall:
+       rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xenblktapctl.pc
+-      rm -f $(DESTDIR)$(libdir)/$(LIBSONAME)
+-      rm -f $(DESTDIR)$(libdir)/$(LIBNAME).so
+-      rm -f $(addprefix $(DESTDIR)$(libdir)/, $(LIB_SHARED))
++      rm -f $(addprefix $(DESTDIR)$(LIBEXEC_LIB)/, $(LIB_SHARED))
+       rm -f $(addprefix $(DESTDIR)$(libdir)/, $(LIB_STATIC))
+-      rm -f $(addprefix $(DESTDIR)$(sbindir)/, $(IBIN))
++      rm -f $(addprefix $(DESTDIR)$(LIBEXEC_BIN)/, $(IBIN))
+ distclean: clean
+--- a/tools/blktap2/vhd/Makefile
++++ b/tools/blktap2/vhd/Makefile
+@@ -12,6 +12,7 @@ CFLAGS            += -Werror
+ CFLAGS            += -Wno-unused
+ CFLAGS            += -I../include
+ CFLAGS            += -D_GNU_SOURCE
++CFLAGS  += $(CFLAGS_libxenctrl)
+ ifeq ($(CONFIG_X86_64),y)
+ CFLAGS            += -fPIC
+--- a/tools/blktap2/vhd/lib/Makefile
++++ b/tools/blktap2/vhd/lib/Makefile
+@@ -2,25 +2,19 @@ XEN_ROOT=$(CURDIR)/../../../..
+ BLKTAP_ROOT := ../..
+ include $(XEN_ROOT)/tools/Rules.mk
+-LIBVHD-MAJOR     = 1.0
+-LIBVHD-MINOR     = 0
+-LIBVHD-SONAME    = libvhd.so.$(LIBVHD-MAJOR)
+-
+ LVM-UTIL-OBJ    := $(BLKTAP_ROOT)/lvm/lvm-util.o
+-LIBVHD-BUILD    := libvhd.a
+-
+-INST-DIR         = $(libdir)
+-
+ CFLAGS          += -Werror
+ CFLAGS          += -Wno-unused
+ CFLAGS          += -I../../include
+ CFLAGS          += -D_GNU_SOURCE
+ CFLAGS          += -fPIC
++CFLAGS                += $(CFLAGS_libxenctrl)
+ ifeq ($(CONFIG_Linux),y)
+ LIBS            := -luuid
+ endif
++LDFLAGS += $(LDFLAGS_libxenctrl) $(call LDFLAGS_RPATH)
+ ifeq ($(CONFIG_LIBICONV),y)
+ LIBS            += -liconv
+@@ -50,33 +44,26 @@ LIB-OBJS        += $(LVM-UTIL-OBJ)
+ LIB-PICOBJS      = $(patsubst %.o,%.opic,$(LIB-OBJS))
+-LIBVHD           = libvhd.a libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR)
++LIBVHD           = libvhd.a libvhd.so
+ all: build
+-build: libvhd.a libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR)
++build: libvhd.a libvhd.so
+ libvhd.a: $(LIB-OBJS)
+       $(AR) rc $@ $^
+-libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR): $(LIB-PICOBJS)
+-      $(CC) -Wl,$(SONAME_LDFLAG),$(LIBVHD-SONAME) $(SHLIB_LDFLAGS) \
+-              $(LDFLAGS) -o libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) $^ $(LIBS)
+-      ln -sf libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) libvhd.so.$(LIBVHD-MAJOR)
+-      ln -sf libvhd.so.$(LIBVHD-MAJOR) libvhd.so
++libvhd.so: $(LIB-PICOBJS)
++      $(CC) $(SHLIB_LDFLAGS) $(LDFLAGS) -o libvhd.so $^ $(LIBS)
+ install: all
+-      $(INSTALL_DIR) -p $(DESTDIR)$(INST-DIR)
+-      $(INSTALL_DATA) libvhd.a $(DESTDIR)$(INST-DIR)
+-      $(INSTALL_PROG) libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) $(DESTDIR)$(INST-DIR)
+-      ln -sf libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) $(DESTDIR)$(INST-DIR)/libvhd.so.$(LIBVHD-MAJOR)
+-      ln -sf libvhd.so.$(LIBVHD-MAJOR) $(DESTDIR)$(INST-DIR)/libvhd.so
++      $(INSTALL_DIR) -p $(DESTDIR)$(libdir)
++      $(INSTALL_DATA) libvhd.a $(DESTDIR)$(libdir)
++      $(INSTALL_PROG) libvhd.so $(DESTDIR)$(libdir)
+ uninstall:
+-      rm -f $(DESTDIR)$(INST-DIR)/libvhd.so
+-      rm -f $(DESTDIR)$(INST-DIR)/libvhd.so.$(LIBVHD-MAJOR)
+-      rm -f $(DESTDIR)$(INST-DIR)/libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR)
+-      rm -f $(DESTDIR)$(INST-DIR)/libvhd.a
++      rm -f $(DESTDIR)$(libdir)/libvhd.so
++      rm -f $(DESTDIR)$(libdir)/libvhd.a
+ clean:
+       rm -rf *.a *.so* *.o *.opic *~ $(DEPS_RM) $(LIBVHD)
diff --git a/patches/prefix-abiname/tools-console-prefix.diff b/patches/prefix-abiname/tools-console-prefix.diff
new file mode 100644 (file)
index 0000000..147be92
--- /dev/null
@@ -0,0 +1,35 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:46:54 +0200
+Subject: tools-console-prefix.diff
+
+Patch-Name: tools-console-prefix.diff
+
+---
+
+--- a/tools/console/Makefile
++++ b/tools/console/Makefile
+@@ -8,6 +8,7 @@ CFLAGS  += $(CFLAGS_libxenstore)
+ LDLIBS += $(LDLIBS_libxenctrl)
+ LDLIBS += $(LDLIBS_libxenstore)
+ LDLIBS += $(SOCKET_LIBS)
++LDFLAGS += $(call LDFLAGS_RPATH,../lib)
+ LDLIBS_xenconsoled += $(UTIL_LIBS)
+ LDLIBS_xenconsoled += -lrt
+@@ -45,14 +46,13 @@ $(eval $(genpath-target))
+ .PHONY: install
+ install: $(BIN)
+-      $(INSTALL_DIR) $(DESTDIR)/$(sbindir)
+-      $(INSTALL_PROG) xenconsoled $(DESTDIR)/$(sbindir)
+       $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN)
+       $(INSTALL_PROG) xenconsole $(DESTDIR)$(LIBEXEC_BIN)
++      $(INSTALL_PROG) xenconsoled $(DESTDIR)$(LIBEXEC_BIN)
+ .PHONY: uninstall
+ uninstall:
+       rm -f $(DESTDIR)$(LIBEXEC_BIN)/xenconsole
+-      rm -f $(DESTDIR)$(sbindir)/xenconsoled
++      rm -f $(DESTDIR)$(LIBEXEC_BIN)/xenconsoled
+ -include $(DEPS_INCLUDE)
diff --git a/patches/prefix-abiname/tools-libfsimage-abiname.diff b/patches/prefix-abiname/tools-libfsimage-abiname.diff
new file mode 100644 (file)
index 0000000..a5dd479
--- /dev/null
@@ -0,0 +1,62 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:46:47 +0200
+Subject: tools-libfsimage-abiname.diff
+
+Patch-Name: tools-libfsimage-abiname.diff
+
+---
+
+--- a/tools/libfsimage/common/Makefile
++++ b/tools/libfsimage/common/Makefile
+@@ -1,9 +1,6 @@
+ XEN_ROOT = $(CURDIR)/../../..
+ include $(XEN_ROOT)/tools/libfsimage/Rules.mk
+-MAJOR = 1.0
+-MINOR = 0
+-
+ LDFLAGS-$(CONFIG_SunOS) = -Wl,-M -Wl,mapfile-SunOS
+ LDFLAGS-$(CONFIG_Linux) = -Wl,mapfile-GNU
+ LDFLAGS = $(LDFLAGS-y)
+@@ -15,7 +12,7 @@ LIB_SRCS-y = fsimage.c fsimage_plugin.c
+ PIC_OBJS := $(patsubst %.c,%.opic,$(LIB_SRCS-y))
+-LIB = libfsimage.so libfsimage.so.$(MAJOR) libfsimage.so.$(MAJOR).$(MINOR)
++LIB = libfsimage.so
+ .PHONY: all
+ all: $(LIB)
+@@ -24,9 +21,7 @@ all: $(LIB)
+ install: all
+       $(INSTALL_DIR) $(DESTDIR)$(libdir)
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)
+-      $(INSTALL_PROG) libfsimage.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
+-      ln -sf libfsimage.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libfsimage.so.$(MAJOR)
+-      ln -sf libfsimage.so.$(MAJOR) $(DESTDIR)$(libdir)/libfsimage.so
++      $(INSTALL_PROG) libfsimage.so $(DESTDIR)$(libdir)
+       $(INSTALL_DATA) fsimage.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) fsimage_plugin.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) fsimage_grub.h $(DESTDIR)$(includedir)
+@@ -37,19 +32,12 @@ uninstall:
+       rm -f $(DESTDIR)$(includedir)/fsimage_plugin.h
+       rm -f $(DESTDIR)$(includedir)/fsimage.h
+       rm -f $(DESTDIR)$(libdir)/libfsimage.so
+-      rm -f $(DESTDIR)$(libdir)/libfsimage.so.$(MAJOR)
+-      rm -f $(DESTDIR)$(libdir)/libfsimage.so.$(MAJOR).$(MINOR)
+ clean distclean::
+       rm -f $(LIB)
+-libfsimage.so: libfsimage.so.$(MAJOR)
+-      ln -sf $< $@
+-libfsimage.so.$(MAJOR): libfsimage.so.$(MAJOR).$(MINOR)
+-      ln -sf $< $@
+-
+-libfsimage.so.$(MAJOR).$(MINOR): $(PIC_OBJS)
+-      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libfsimage.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $^ $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
++libfsimage.so: $(PIC_OBJS)
++      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $^ $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
+ -include $(DEPS_INCLUDE)
diff --git a/patches/prefix-abiname/tools-libfsimage-prefix.diff b/patches/prefix-abiname/tools-libfsimage-prefix.diff
new file mode 100644 (file)
index 0000000..c6ceea7
--- /dev/null
@@ -0,0 +1,55 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:46:55 +0200
+Subject: tools-libfsimage-prefix.diff
+
+Patch-Name: tools-libfsimage-prefix.diff
+
+---
+
+--- a/tools/libfsimage/Rules.mk
++++ b/tools/libfsimage/Rules.mk
+@@ -3,10 +3,11 @@ include $(XEN_ROOT)/tools/Rules.mk
+ CFLAGS += -Wno-unknown-pragmas -I$(XEN_ROOT)/tools/libfsimage/common/ -DFSIMAGE_FSDIR=\"$(FSDIR)\"
+ CFLAGS += -Werror -D_GNU_SOURCE
+ LDFLAGS += -L../common/
++LDFLAGS += $(call LDFLAGS_RPATH,../..)
+ PIC_OBJS := $(patsubst %.c,%.opic,$(LIB_SRCS-y))
+-FSDIR = $(libdir)/fs
++FSDIR = $(LIBEXEC_LIB)/fs
+ FSLIB = fsimage.so
+--- a/tools/libfsimage/common/Makefile
++++ b/tools/libfsimage/common/Makefile
+@@ -1,6 +1,8 @@
+ XEN_ROOT = $(CURDIR)/../../..
+ include $(XEN_ROOT)/tools/libfsimage/Rules.mk
++CFLAGS += -DFSDIR="\"$(LIBEXEC_LIB)/fs\""
++
+ LDFLAGS-$(CONFIG_SunOS) = -Wl,-M -Wl,mapfile-SunOS
+ LDFLAGS-$(CONFIG_Linux) = -Wl,mapfile-GNU
+ LDFLAGS = $(LDFLAGS-y)
+@@ -19,9 +21,9 @@ all: $(LIB)
+ .PHONY: install
+ install: all
+-      $(INSTALL_DIR) $(DESTDIR)$(libdir)
++      $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_LIB)
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)
+-      $(INSTALL_PROG) libfsimage.so $(DESTDIR)$(libdir)
++      $(INSTALL_PROG) libfsimage.so $(DESTDIR)$(LIBEXEC_LIB)
+       $(INSTALL_DATA) fsimage.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) fsimage_plugin.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) fsimage_grub.h $(DESTDIR)$(includedir)
+@@ -31,7 +33,7 @@ uninstall:
+       rm -f $(DESTDIR)$(includedir)/fsimage_grub.h
+       rm -f $(DESTDIR)$(includedir)/fsimage_plugin.h
+       rm -f $(DESTDIR)$(includedir)/fsimage.h
+-      rm -f $(DESTDIR)$(libdir)/libfsimage.so
++      rm -f $(DESTDIR)$(LIBEXEC_LIB)/libfsimage.so
+ clean distclean::
+       rm -f $(LIB)
diff --git a/patches/prefix-abiname/tools-libxc-abiname.diff b/patches/prefix-abiname/tools-libxc-abiname.diff
new file mode 100644 (file)
index 0000000..0887d2e
--- /dev/null
@@ -0,0 +1,122 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:46:48 +0200
+Subject: tools-libxc-abiname.diff
+
+Patch-Name: tools-libxc-abiname.diff
+
+---
+
+--- a/tools/libxc/Makefile
++++ b/tools/libxc/Makefile
+@@ -1,9 +1,6 @@
+ XEN_ROOT = $(CURDIR)/../..
+ include $(XEN_ROOT)/tools/Rules.mk
+-MAJOR    = 4.11
+-MINOR    = 0
+-
+ ifeq ($(CONFIG_LIBXC_MINIOS),y)
+ # Save/restore of a domain is currently incompatible with a stubdom environment
+ override CONFIG_MIGRATE := n
+@@ -134,12 +131,12 @@ $(CTRL_LIB_OBJS) $(CTRL_PIC_OBJS): CFLAG
+ LIB := libxenctrl.a
+ ifneq ($(nosharedlibs),y)
+-LIB += libxenctrl.so libxenctrl.so.$(MAJOR) libxenctrl.so.$(MAJOR).$(MINOR)
++LIB += libxenctrl.so libxenctrl-$(PACKAGE_VERSION).so
+ endif
+ LIB += libxenguest.a
+ ifneq ($(nosharedlibs),y)
+-LIB += libxenguest.so libxenguest.so.$(MAJOR) libxenguest.so.$(MAJOR).$(MINOR)
++LIB += libxenguest.so libxenguest-$(PACKAGE_VERSION).so
+ endif
+ genpath-target = $(call buildmakevars2header,_paths.h)
+@@ -160,7 +157,7 @@ $(CTRL_LIB_OBJS) $(GUEST_LIB_OBJS) \
+ $(CTRL_PIC_OBJS) $(GUEST_PIC_OBJS): xc_private.h
+ PKG_CONFIG := xencontrol.pc xenguest.pc
+-PKG_CONFIG_VERSION := $(MAJOR).$(MINOR)
++PKG_CONFIG_VERSION := $(PACKAGE_VERSION)
+ ifneq ($(CONFIG_LIBXC_MINIOS),y)
+ PKG_CONFIG_INST := $(PKG_CONFIG)
+@@ -190,15 +187,13 @@ libs: $(LIB) $(PKG_CONFIG_INST) $(PKG_CO
+ install: build
+       $(INSTALL_DIR) $(DESTDIR)$(libdir)
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)
+-      $(INSTALL_SHLIB) libxenctrl.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
++      $(INSTALL_SHLIB) libxenctrl-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)
++      $(SYMLINK_SHLIB) libxenctrl-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libxenctrl.so
+       $(INSTALL_DATA) libxenctrl.a $(DESTDIR)$(libdir)
+-      $(SYMLINK_SHLIB) libxenctrl.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenctrl.so.$(MAJOR)
+-      $(SYMLINK_SHLIB) libxenctrl.so.$(MAJOR) $(DESTDIR)$(libdir)/libxenctrl.so
+       $(INSTALL_DATA) include/xenctrl.h include/xenctrl_compat.h $(DESTDIR)$(includedir)
+-      $(INSTALL_SHLIB) libxenguest.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
++      $(INSTALL_SHLIB) libxenguest-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)
++      $(SYMLINK_SHLIB) libxenguest-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libxenguest.so
+       $(INSTALL_DATA) libxenguest.a $(DESTDIR)$(libdir)
+-      $(SYMLINK_SHLIB) libxenguest.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenguest.so.$(MAJOR)
+-      $(SYMLINK_SHLIB) libxenguest.so.$(MAJOR) $(DESTDIR)$(libdir)/libxenguest.so
+       $(INSTALL_DATA) include/xenguest.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) xencontrol.pc $(DESTDIR)$(PKG_INSTALLDIR)
+       $(INSTALL_DATA) xenguest.pc $(DESTDIR)$(PKG_INSTALLDIR)
+@@ -208,15 +203,13 @@ uninstall:
+       rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xenguest.pc
+       rm -f $(DESTDIR)$(includedir)/xenguest.h
+       rm -f $(DESTDIR)$(libdir)/libxenguest.so
+-      rm -f $(DESTDIR)$(libdir)/libxenguest.so.$(MAJOR)
+-      rm -f $(DESTDIR)$(libdir)/libxenguest.so.$(MAJOR).$(MINOR)
++      rm -f $(DESTDIR)$(libdir)/libxenguest-$(PACKAGE_VERSION).so
+       rm -f $(DESTDIR)$(libdir)/libxenguest.a
+       rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xencontrol.pc
+       rm -f $(DESTDIR)$(includedir)/xenctrl.h
+       rm -f $(DESTDIR)$(includedir)/xenctrl_compat.h
+       rm -f $(DESTDIR)$(libdir)/libxenctrl.so
+-      rm -f $(DESTDIR)$(libdir)/libxenctrl.so.$(MAJOR)
+-      rm -f $(DESTDIR)$(libdir)/libxenctrl.so.$(MAJOR).$(MINOR)
++      rm -f $(DESTDIR)$(libdir)/libxenctrl-$(PACKAGE_VERSION).so
+       rm -f $(DESTDIR)$(libdir)/libxenctrl.a
+ .PHONY: TAGS
+@@ -249,22 +242,18 @@ rpm: build
+ libxenctrl.a: $(CTRL_LIB_OBJS)
+       $(AR) rc $@ $^
+-libxenctrl.so: libxenctrl.so.$(MAJOR)
+-      $(SYMLINK_SHLIB) $< $@
+-libxenctrl.so.$(MAJOR): libxenctrl.so.$(MAJOR).$(MINOR)
++libxenctrl.so: libxenctrl-$(PACKAGE_VERSION).so
+       $(SYMLINK_SHLIB) $< $@
+-libxenctrl.so.$(MAJOR).$(MINOR): $(CTRL_PIC_OBJS)
+-      $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenctrl.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $^ $(LDLIBS_libxentoollog) $(LDLIBS_libxenevtchn) $(LDLIBS_libxengnttab) $(LDLIBS_libxencall) $(LDLIBS_libxenforeignmemory) $(LDLIBS_libxendevicemodel) $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
++libxenctrl-$(PACKAGE_VERSION).so: $(CTRL_PIC_OBJS)
++      $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $^ $(LDLIBS_libxentoollog) $(LDLIBS_libxenevtchn) $(LDLIBS_libxengnttab) $(LDLIBS_libxencall) $(LDLIBS_libxenforeignmemory) $(LDLIBS_libxendevicemodel) $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
+ # libxenguest
+ libxenguest.a: $(GUEST_LIB_OBJS)
+       $(AR) rc $@ $^
+-libxenguest.so: libxenguest.so.$(MAJOR)
+-      $(SYMLINK_SHLIB) $< $@
+-libxenguest.so.$(MAJOR): libxenguest.so.$(MAJOR).$(MINOR)
++libxenguest.so: libxenguest-$(PACKAGE_VERSION).so
+       $(SYMLINK_SHLIB) $< $@
+ ifeq ($(CONFIG_MiniOS),y)
+@@ -276,9 +265,9 @@ endif
+ xc_dom_bzimageloader.o: CFLAGS += $(filter -D%,$(zlib-options))
+ xc_dom_bzimageloader.opic: CFLAGS += $(filter -D%,$(zlib-options))
+-libxenguest.so.$(MAJOR).$(MINOR): COMPRESSION_LIBS = $(filter -l%,$(zlib-options))
+-libxenguest.so.$(MAJOR).$(MINOR): $(GUEST_PIC_OBJS) libxenctrl.so
+-      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenguest.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(GUEST_PIC_OBJS) $(COMPRESSION_LIBS) -lz $(LDLIBS_libxenevtchn) $(LDLIBS_libxenctrl) $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
++libxenguest-$(PACKAGE_VERSION).so: COMPRESSION_LIBS = $(filter -l%,$(zlib-options))
++libxenguest-$(PACKAGE_VERSION).so: $(GUEST_PIC_OBJS) libxenctrl-$(PACKAGE_VERSION).so
++      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $(GUEST_PIC_OBJS) $(COMPRESSION_LIBS) -lz $(LDLIBS_libxenevtchn) $(LDLIBS_libxenctrl) $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
+ -include $(DEPS_INCLUDE)
diff --git a/patches/prefix-abiname/tools-libxl-abiname.diff b/patches/prefix-abiname/tools-libxl-abiname.diff
new file mode 100644 (file)
index 0000000..d3f2f1e
--- /dev/null
@@ -0,0 +1,119 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:46:49 +0200
+Subject: tools-libxl-abiname.diff
+
+Patch-Name: tools-libxl-abiname.diff
+---
+
+--- a/tools/libxl/Makefile
++++ b/tools/libxl/Makefile
+@@ -5,12 +5,6 @@
+ XEN_ROOT = $(CURDIR)/../..
+ include $(XEN_ROOT)/tools/Rules.mk
+-MAJOR = 4.11
+-MINOR = 0
+-
+-XLUMAJOR = 4.11
+-XLUMINOR = 0
+-
+ CFLAGS += -Werror -Wno-format-zero-length -Wmissing-declarations \
+       -Wno-declaration-after-statement -Wformat-nonliteral
+ CFLAGS += -I. -fPIC
+@@ -190,12 +184,12 @@ SAVE_HELPER_OBJS = libxl_save_helper.o _
+ $(SAVE_HELPER_OBJS): CFLAGS += $(CFLAGS_libxenctrl) $(CFLAGS_libxenevtchn)
+ PKG_CONFIG = xenlight.pc xlutil.pc
+-PKG_CONFIG_VERSION := $(MAJOR).$(MINOR)
++PKG_CONFIG_VERSION := $(PACKAGE_VERSION)
+ ifneq ($(CONFIG_LIBXC_MINIOS),y)
+ PKG_CONFIG_INST := $(PKG_CONFIG)
+-xenlight.pc: PKG_CONFIG_VERSION = $(MAJOR).$(MINOR)
+-xlutil.pc: PKG_CONFIG_VERSION = $(XLUMAJOR).$(XLUMINOR)
++xenlight.pc: PKG_CONFIG_VERSION = $(PACKAGE_VERSION)
++xlutil.pc: PKG_CONFIG_VERSION = $(PACKAGE_VERSION)
+ $(PKG_CONFIG_INST): PKG_CONFIG_PREFIX = $(prefix)
+ $(PKG_CONFIG_INST): PKG_CONFIG_INCDIR = $(includedir)
+ $(PKG_CONFIG_INST): PKG_CONFIG_LIBDIR = $(libdir)
+@@ -203,8 +197,8 @@ endif
+ PKG_CONFIG_LOCAL := $(foreach pc,$(PKG_CONFIG),$(PKG_CONFIG_DIR)/$(pc))
+-$(PKG_CONFIG_DIR)/xenlight.pc: PKG_CONFIG_VERSION = $(MAJOR).$(MINOR)
+-$(PKG_CONFIG_DIR)/xlutil.pc: PKG_CONFIG_VERSION = $(XLUMAJOR).$(XLUMINOR)
++$(PKG_CONFIG_DIR)/xenlight.pc: PKG_CONFIG_VERSION = $(PACKAGE_VERSION)
++$(PKG_CONFIG_DIR)/xlutil.pc: PKG_CONFIG_VERSION = $(PACKAGE_VERSION)
+ $(PKG_CONFIG_LOCAL): PKG_CONFIG_PREFIX = $(XEN_ROOT)
+ $(PKG_CONFIG_LOCAL): PKG_CONFIG_INCDIR = $(CURDIR)
+ $(PKG_CONFIG_LOCAL): PKG_CONFIG_LIBDIR = $(CURDIR)
+@@ -274,29 +268,23 @@ _libxl_type%.h _libxl_type%_json.h _libx
+       $(call move-if-changed,__libxl_type$(stem)_json.h,_libxl_type$(stem)_json.h)
+       $(call move-if-changed,__libxl_type$(stem).c,_libxl_type$(stem).c)
+-libxenlight.so: libxenlight.so.$(MAJOR)
+-      $(SYMLINK_SHLIB) $< $@
+-
+-libxenlight.so.$(MAJOR): libxenlight.so.$(MAJOR).$(MINOR)
++libxenlight.so: libxenlight-$(PACKAGE_VERSION).so
+       $(SYMLINK_SHLIB) $< $@
+-libxenlight.so.$(MAJOR).$(MINOR): $(LIBXL_OBJS)
+-      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenlight.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $^ $(LIBXL_LIBS) $(APPEND_LDFLAGS)
++libxenlight-$(PACKAGE_VERSION).so: $(LIBXL_OBJS)
++      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $^ $(LIBXL_LIBS) $(APPEND_LDFLAGS)
+ libxenlight_test.so: $(LIBXL_OBJS) $(LIBXL_TEST_OBJS)
+-      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenlight.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $^ $(LIBXL_LIBS) $(APPEND_LDFLAGS)
++      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $^ $(LIBXL_LIBS) $(APPEND_LDFLAGS)
+ libxenlight.a: $(LIBXL_OBJS)
+       $(AR) rcs libxenlight.a $^
+-libxlutil.so: libxlutil.so.$(XLUMAJOR)
+-      $(SYMLINK_SHLIB) $< $@
+-
+-libxlutil.so.$(XLUMAJOR): libxlutil.so.$(XLUMAJOR).$(XLUMINOR)
++libxlutil.so: libxlutil-$(PACKAGE_VERSION).so
+       $(SYMLINK_SHLIB) $< $@
+-libxlutil.so.$(XLUMAJOR).$(XLUMINOR): $(LIBXLU_OBJS) libxenlight.so
+-      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxlutil.so.$(XLUMAJOR) $(SHLIB_LDFLAGS) -o $@ $(LIBXLU_OBJS) $(LIBXLU_LIBS) $(APPEND_LDFLAGS)
++libxlutil-$(PACKAGE_VERSION).so: $(LIBXLU_OBJS) libxenlight.so
++      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $(LIBXLU_OBJS) $(LIBXLU_LIBS) $(APPEND_LDFLAGS)
+ libxlutil.a: $(LIBXLU_OBJS)
+       $(AR) rcs libxlutil.a $^
+@@ -316,13 +304,11 @@ install: all
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)
+       $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN)
+       $(INSTALL_PROG) libxl-save-helper $(DESTDIR)$(LIBEXEC_BIN)
+-      $(INSTALL_SHLIB) libxenlight.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
+-      $(SYMLINK_SHLIB) libxenlight.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenlight.so.$(MAJOR)
+-      $(SYMLINK_SHLIB) libxenlight.so.$(MAJOR) $(DESTDIR)$(libdir)/libxenlight.so
++      $(INSTALL_SHLIB) libxenlight-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)
++      $(SYMLINK_SHLIB) libxenlight-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libxenlight.so
+       $(INSTALL_DATA) libxenlight.a $(DESTDIR)$(libdir)
+-      $(INSTALL_SHLIB) libxlutil.so.$(XLUMAJOR).$(XLUMINOR) $(DESTDIR)$(libdir)
+-      $(SYMLINK_SHLIB) libxlutil.so.$(XLUMAJOR).$(XLUMINOR) $(DESTDIR)$(libdir)/libxlutil.so.$(XLUMAJOR)
+-      $(SYMLINK_SHLIB) libxlutil.so.$(XLUMAJOR) $(DESTDIR)$(libdir)/libxlutil.so
++      $(INSTALL_SHLIB) libxlutil-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)
++      $(SYMLINK_SHLIB) libxlutil-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libxlutil.so
+       $(INSTALL_DATA) libxlutil.a $(DESTDIR)$(libdir)
+       $(INSTALL_DATA) libxl.h libxl_event.h libxl_json.h _libxl_types.h _libxl_types_json.h _libxl_list.h libxl_utils.h libxl_uuid.h libxlutil.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) xenlight.pc $(DESTDIR)$(PKG_INSTALLDIR)
+@@ -334,12 +320,10 @@ uninstall:
+       rm -f $(addprefix $(DESTDIR)$(includedir)/,libxl.h libxl_event.h libxl_json.h _libxl_types.h _libxl_types_json.h _libxl_list.h libxl_utils.h libxl_uuid.h libxlutil.h)
+       rm -f $(DESTDIR)$(libdir)/libxlutil.a
+       rm -f $(DESTDIR)$(libdir)/libxlutil.so
+-      rm -f $(DESTDIR)$(libdir)/libxlutil.so.$(XLUMAJOR)
+-      rm -f $(DESTDIR)$(libdir)/libxlutil.so.$(XLUMAJOR).$(XLUMINOR)
++      rm -f $(DESTDIR)$(libdir)/libxlutil-$(PACKAGE_VERSION).so
+       rm -f $(DESTDIR)$(libdir)/libxenlight.a
+       rm -f $(DESTDIR)$(libdir)/libxenlight.so
+-      rm -f $(DESTDIR)$(libdir)/libxenlight.so.$(MAJOR)
+-      rm -f $(DESTDIR)$(libdir)/libxenlight.so.$(MAJOR).$(MINOR)
++      rm -f $(DESTDIR)$(libdir)/libxenlight-$(PACKAGE_VERSION).so
+       rm -f $(DESTDIR)$(LIBEXEC_BIN)/libxl-save-helper
+ .PHONY: clean
diff --git a/patches/prefix-abiname/tools-libxl-prefix.diff b/patches/prefix-abiname/tools-libxl-prefix.diff
new file mode 100644 (file)
index 0000000..ea329b4
--- /dev/null
@@ -0,0 +1,51 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:46:57 +0200
+Subject: tools-libxl-prefix.diff
+
+Patch-Name: tools-libxl-prefix.diff
+
+Note: SMB: Added change for LIBEXEC_BIN for tools/xl/Makefile
+---
+
+--- a/tools/libxl/Makefile
++++ b/tools/libxl/Makefile
+@@ -13,6 +13,9 @@ ifeq ($(CONFIG_Linux),y)
+ LIBUUID_LIBS += -luuid
+ endif
++LDFLAGS_XL = $(call LDFLAGS_RPATH,../lib)
++LDFLAGS_LIBXL = $(call LDFLAGS_RPATH)
++
+ LIBXL_LIBS =
+ LIBXL_LIBS = $(LDLIBS_libxentoollog) $(LDLIBS_libxenevtchn) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenstore) $(LDLIBS_libblktapctl) $(LDLIBS_libxentoolcore) $(PTYFUNCS_LIBS) $(LIBUUID_LIBS)
+ ifeq ($(CONFIG_LIBNL),y)
+@@ -272,7 +275,7 @@ libxenlight.so: libxenlight-$(PACKAGE_VE
+       $(SYMLINK_SHLIB) $< $@
+ libxenlight-$(PACKAGE_VERSION).so: $(LIBXL_OBJS)
+-      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $^ $(LIBXL_LIBS) $(APPEND_LDFLAGS)
++      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(LDFLAGS_LIBXL) $(SHLIB_LDFLAGS) -o $@ $^ $(LIBXL_LIBS) $(APPEND_LDFLAGS)
+ libxenlight_test.so: $(LIBXL_OBJS) $(LIBXL_TEST_OBJS)
+       $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG),$@ $(SHLIB_LDFLAGS) -o $@ $^ $(LIBXL_LIBS) $(APPEND_LDFLAGS)
+--- a/tools/xl/Makefile
++++ b/tools/xl/Makefile
+@@ -41,15 +41,15 @@ xl: $(XL_OBJS)
+ .PHONY: install
+ install: all
+-      $(INSTALL_DIR) $(DESTDIR)$(sbindir)
++      $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN)
+       $(INSTALL_DIR) $(DESTDIR)$(BASH_COMPLETION_DIR)
+-      $(INSTALL_PROG) xl $(DESTDIR)$(sbindir)
++      $(INSTALL_PROG) xl $(DESTDIR)$(LIBEXEC_BIN)
+       $(INSTALL_DATA) bash-completion $(DESTDIR)$(BASH_COMPLETION_DIR)/xl.sh
+ .PHONY: uninstall
+ uninstall:
+       rm -f $(DESTDIR)$(BASH_COMPLETION_DIR)/xl.sh
+-      rm -f $(DESTDIR)$(sbindir)/xl
++      rm -f $(DESTDIR)$(LIBEXEC_BIN)/xl
+ .PHONY: clean
+ clean:
diff --git a/patches/prefix-abiname/tools-misc-prefix.diff b/patches/prefix-abiname/tools-misc-prefix.diff
new file mode 100644 (file)
index 0000000..9674a3e
--- /dev/null
@@ -0,0 +1,33 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:46:59 +0200
+Subject: tools-misc-prefix.diff
+
+Patch-Name: tools-misc-prefix.diff
+
+---
+
+--- a/tools/misc/Makefile
++++ b/tools/misc/Makefile
+@@ -55,18 +55,16 @@ all build: $(TARGETS_BUILD)
+ .PHONY: install
+ install: build
+-      $(INSTALL_DIR) $(DESTDIR)$(bindir)
+-      $(INSTALL_DIR) $(DESTDIR)$(sbindir)
+       $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN)
+-      $(INSTALL_PYTHON_PROG) $(INSTALL_BIN) $(DESTDIR)$(bindir)
+-      $(INSTALL_PYTHON_PROG) $(INSTALL_SBIN) $(DESTDIR)$(sbindir)
++      $(INSTALL_PYTHON_PROG) $(INSTALL_BIN) $(DESTDIR)$(LIBEXEC_BIN)
++      $(INSTALL_PYTHON_PROG) $(INSTALL_SBIN) $(DESTDIR)$(LIBEXEC_BIN)
+       $(INSTALL_PYTHON_PROG) $(INSTALL_PRIVBIN) $(DESTDIR)$(LIBEXEC_BIN)
+ .PHONY: uninstall
+ uninstall:
+       rm -f $(addprefix $(DESTDIR)$(LIBEXEC_BIN)/, $(INSTALL_PRIVBIN))
+-      rm -f $(addprefix $(DESTDIR)$(sbindir)/, $(INSTALL_SBIN))
+-      rm -f $(addprefix $(DESTDIR)$(bindir)/, $(INSTALL_BIN))
++      rm -f $(addprefix $(DESTDIR)$(LIBEXEC_BIN)/, $(INSTALL_SBIN))
++      rm -f $(addprefix $(DESTDIR)$(LIBEXEC_BIN)/, $(INSTALL_BIN))
+ .PHONY: clean
+ clean:
diff --git a/patches/prefix-abiname/tools-pygrub-prefix.diff b/patches/prefix-abiname/tools-pygrub-prefix.diff
new file mode 100644 (file)
index 0000000..bcb8770
--- /dev/null
@@ -0,0 +1,49 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:47:01 +0200
+Subject: tools-pygrub-prefix.diff
+
+Patch-Name: tools-pygrub-prefix.diff
+
+---
+
+--- a/tools/pygrub/Makefile
++++ b/tools/pygrub/Makefile
+@@ -18,11 +18,6 @@ install: all
+       CC="$(CC)" CFLAGS="$(PY_CFLAGS)" LDFLAGS="$(PY_LDFLAGS)" $(PYTHON) \
+               setup.py install --record $(INSTALL_LOG) $(PYTHON_PREFIX_ARG) \
+                --root="$(DESTDIR)" --install-scripts=$(LIBEXEC_BIN) --force
+-      set -e; if [ $(bindir) != $(LIBEXEC_BIN) -a \
+-                   "`readlink -f $(DESTDIR)/$(bindir)`" != \
+-                   "`readlink -f $(LIBEXEC_BIN)`" ]; then \
+-          ln -sf $(LIBEXEC_BIN)/pygrub $(DESTDIR)/$(bindir); \
+-      fi
+ .PHONY: uninstall
+ uninstall:
+--- a/tools/pygrub/setup.py
++++ b/tools/pygrub/setup.py
+@@ -4,11 +4,13 @@ import os
+ import sys
+ extra_compile_args  = [ "-fno-strict-aliasing", "-Werror" ]
++extra_link_args = [ "-Wl,-rpath,${ORIGIN}/.." ]
+ XEN_ROOT = "../.."
+ fsimage = Extension("fsimage",
+     extra_compile_args = extra_compile_args,
++    extra_link_args = extra_link_args,
+     include_dirs = [ XEN_ROOT + "/tools/libfsimage/common/" ],
+     library_dirs = [ XEN_ROOT + "/tools/libfsimage/common/" ],
+     libraries = ["fsimage"],
+--- a/tools/pygrub/src/pygrub
++++ b/tools/pygrub/src/pygrub
+@@ -21,6 +21,8 @@ import xen.lowlevel.xc
+ import curses, _curses, curses.wrapper, curses.textpad, curses.ascii
+ import getopt
++sys.path.insert(1, sys.path[0] + '/../lib/python')
++
+ import fsimage
+ import grub.GrubConf
+ import grub.LiloConf
diff --git a/patches/prefix-abiname/tools-python-prefix.diff b/patches/prefix-abiname/tools-python-prefix.diff
new file mode 100644 (file)
index 0000000..48375b7
--- /dev/null
@@ -0,0 +1,32 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:47:02 +0200
+Subject: tools-python-prefix.diff
+
+Patch-Name: tools-python-prefix.diff
+
+---
+
+--- a/tools/python/setup.py
++++ b/tools/python/setup.py
+@@ -5,6 +5,7 @@ import os, sys
+ XEN_ROOT = "../.."
+ extra_compile_args  = [ "-fno-strict-aliasing", "-Werror" ]
++extra_link_args = [ "-Wl,-rpath,${ORIGIN}/../../.." ]
+ PATH_XEN      = XEN_ROOT + "/tools/include"
+ PATH_LIBXENTOOLLOG = XEN_ROOT + "/tools/libs/toollog"
+@@ -23,11 +24,12 @@ xc = Extension("xc",
+                library_dirs       = [ PATH_LIBXC ],
+                libraries          = [ "xenctrl", "xenguest" ],
+                depends            = [ PATH_LIBXC + "/libxenctrl.so", PATH_LIBXC + "/libxenguest.so" ],
+-               extra_link_args    = [ "-Wl,-rpath-link="+PATH_LIBXENTOOLLOG ],
++               extra_link_args    = extra_link_args + [ "-Wl,-rpath-link="+PATH_LIBXENTOOLLOG ],
+                sources            = [ "xen/lowlevel/xc/xc.c" ])
+ xs = Extension("xs",
+                extra_compile_args = extra_compile_args,
++               extra_link_args    = extra_link_args,
+                include_dirs       = [ PATH_XEN, PATH_XENSTORE + "/include", "xen/lowlevel/xs" ],
+                library_dirs       = [ PATH_XENSTORE ],
+                libraries          = [ "xenstore" ],
diff --git a/patches/prefix-abiname/tools-rpath.diff b/patches/prefix-abiname/tools-rpath.diff
new file mode 100644 (file)
index 0000000..8c2c709
--- /dev/null
@@ -0,0 +1,19 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:46:51 +0200
+Subject: tools-rpath.diff
+
+Patch-Name: tools-rpath.diff
+
+---
+
+--- a/tools/Rules.mk
++++ b/tools/Rules.mk
+@@ -9,6 +9,8 @@ include $(XEN_ROOT)/Config.mk
+ export _INSTALL := $(INSTALL)
+ INSTALL = $(XEN_ROOT)/tools/cross-install
++LDFLAGS_RPATH = -Wl,-rpath,'$${ORIGIN}$(if $(1),/$(1))'
++
+ XEN_INCLUDE        = $(XEN_ROOT)/tools/include
+ XEN_LIBXENTOOLCORE  = $(XEN_ROOT)/tools/libs/toolcore
+ XEN_LIBXENTOOLLOG  = $(XEN_ROOT)/tools/libs/toollog
diff --git a/patches/prefix-abiname/tools-xcutils-rpath.diff b/patches/prefix-abiname/tools-xcutils-rpath.diff
new file mode 100644 (file)
index 0000000..6e7db6a
--- /dev/null
@@ -0,0 +1,19 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:47:05 +0200
+Subject: tools-xcutils-rpath.diff
+
+Patch-Name: tools-xcutils-rpath.diff
+
+---
+
+--- a/tools/xcutils/Makefile
++++ b/tools/xcutils/Makefile
+@@ -19,6 +19,8 @@ CFLAGS += -Werror
+ CFLAGS_readnotes.o  := $(CFLAGS_libxenevtchn) $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest) -I$(XEN_ROOT)/tools/libxc $(CFLAGS_libxencall)
+ CFLAGS_lsevtchn.o   := $(CFLAGS_libxenevtchn) $(CFLAGS_libxenctrl)
++APPEND_LDFLAGS += $(call LDFLAGS_RPATH,../lib)
++
+ .PHONY: all
+ all: build
diff --git a/patches/prefix-abiname/tools-xenmon-prefix.diff b/patches/prefix-abiname/tools-xenmon-prefix.diff
new file mode 100644 (file)
index 0000000..d42909d
--- /dev/null
@@ -0,0 +1,42 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:47:06 +0200
+Subject: tools-xenmon-prefix.diff
+
+Patch-Name: tools-xenmon-prefix.diff
+
+---
+
+--- a/tools/xenmon/Makefile
++++ b/tools/xenmon/Makefile
+@@ -18,6 +18,7 @@ CFLAGS  += $(CFLAGS_libxenevtchn)
+ CFLAGS  += $(CFLAGS_libxenctrl)
+ LDLIBS  += $(LDLIBS_libxenctrl)
+ LDLIBS  += $(LDLIBS_libxenevtchn)
++LDFLAGS += $(call LDFLAGS_RPATH,../lib)
+ SCRIPTS = xenmon.py
+@@ -29,16 +30,16 @@ build: xentrace_setmask xenbaked
+ .PHONY: install
+ install: build
+-      $(INSTALL_DIR) $(DESTDIR)$(sbindir)
+-      $(INSTALL_PROG) xenbaked $(DESTDIR)$(sbindir)/xenbaked
+-      $(INSTALL_PROG) xentrace_setmask  $(DESTDIR)$(sbindir)/xentrace_setmask
+-      $(INSTALL_PROG) xenmon.py  $(DESTDIR)$(sbindir)/xenmon.py
++      $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN)
++      $(INSTALL_PROG) xenbaked $(DESTDIR)$(LIBEXEC_BIN)/xenbaked
++      $(INSTALL_PROG) xentrace_setmask  $(DESTDIR)$(LIBEXEC_BIN)/xentrace_setmask
++      $(INSTALL_PROG) xenmon.py  $(DESTDIR)$(LIBEXEC_BIN)/xenmon.py
+ .PHONY: uninstall
+ uninstall:
+-      rm -f $(DESTDIR)$(sbindir)/xenbaked
+-      rm -f $(DESTDIR)$(sbindir)/xentrace_setmask
+-      rm -f $(DESTDIR)$(sbindir)/xenmon.py
++      rm -f $(DESTDIR)$(LIBEXEC_BIN)/xenbaked
++      rm -f $(DESTDIR)$(LIBEXEC_BIN)/xentrace_setmask
++      rm -f $(DESTDIR)$(LIBEXEC_BIN)/xenmon.py
+ .PHONY: clean
+ clean:
diff --git a/patches/prefix-abiname/tools-xenpaging-prefix.diff b/patches/prefix-abiname/tools-xenpaging-prefix.diff
new file mode 100644 (file)
index 0000000..7cdd3ae
--- /dev/null
@@ -0,0 +1,19 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:47:08 +0200
+Subject: tools-xenpaging-prefix.diff
+
+Patch-Name: tools-xenpaging-prefix.diff
+
+---
+
+--- a/tools/xenpaging/Makefile
++++ b/tools/xenpaging/Makefile
+@@ -4,7 +4,7 @@ include $(XEN_ROOT)/tools/Rules.mk
+ # xenpaging.c and file_ops.c incorrectly use libxc internals
+ CFLAGS += $(CFLAGS_libxentoollog) $(CFLAGS_libxenevtchn) $(CFLAGS_libxenctrl) $(CFLAGS_libxenstore) $(PTHREAD_CFLAGS) -I$(XEN_ROOT)/tools/libxc $(CFLAGS_libxencall)
+ LDLIBS += $(LDLIBS_libxentoollog) $(LDLIBS_libxenevtchn) $(LDLIBS_libxenctrl) $(LDLIBS_libxenstore) $(PTHREAD_LIBS)
+-LDFLAGS += $(PTHREAD_LDFLAGS)
++LDFLAGS += $(PTHREAD_LDFLAGS) $(call LDFLAGS_RPATH,../lib)
+ POLICY    = default
diff --git a/patches/prefix-abiname/tools-xenpmd-prefix.diff b/patches/prefix-abiname/tools-xenpmd-prefix.diff
new file mode 100644 (file)
index 0000000..80cefff
--- /dev/null
@@ -0,0 +1,30 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 13 Dec 2014 19:37:02 +0100
+Subject: tools-xenpmd-prefix.diff
+
+Patch-Name: tools-xenpmd-prefix.diff
+
+---
+
+--- a/tools/xenpmd/Makefile
++++ b/tools/xenpmd/Makefile
+@@ -11,8 +11,8 @@ all: xenpmd
+ .PHONY: install
+ install: all
+-      $(INSTALL_DIR) $(DESTDIR)$(sbindir)
+-      $(INSTALL_PROG) xenpmd $(DESTDIR)$(sbindir)
++      $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN)
++      $(INSTALL_PROG) xenpmd $(DESTDIR)$(LIBEXEC_BIN)
+ .PHONY: clean
+ clean:
+@@ -23,7 +23,7 @@ distclean: clean
+ .PHONY: uninstall
+ uninstall:
+-      rm -f $(DESTDIR)$(sbindir)/xenpmd
++      rm -f $(DESTDIR)$(LIBEXEC_BIN)/xenpmd
+ xenpmd: xenpmd.o Makefile
+       $(CC) $(LDFLAGS) $< -o $@ $(LDLIBS) $(APPEND_LDFLAGS)
diff --git a/patches/prefix-abiname/tools-xenstat-abiname.diff b/patches/prefix-abiname/tools-xenstat-abiname.diff
new file mode 100644 (file)
index 0000000..f01d9cf
--- /dev/null
@@ -0,0 +1,79 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:46:50 +0200
+Subject: tools-xenstat-abiname.diff
+
+Patch-Name: tools-xenstat-abiname.diff
+
+---
+
+--- a/tools/xenstat/libxenstat/Makefile
++++ b/tools/xenstat/libxenstat/Makefile
+@@ -18,18 +18,14 @@ include $(XEN_ROOT)/tools/Rules.mk
+ LDCONFIG=ldconfig
+ MAKE_LINK=ln -sf
+-MAJOR=0
+-MINOR=0
+-
+ LIB=src/libxenstat.a
+-SHLIB=src/libxenstat.so.$(MAJOR).$(MINOR)
+-SHLIB_LINKS=src/libxenstat.so.$(MAJOR) src/libxenstat.so
+-OBJECTS-y=src/xenstat.o src/xenstat_qmp.o
++SHLIB=src/libxenstat.so
++OBJECTS-y=src/xenstat.o
+ OBJECTS-$(CONFIG_Linux) += src/xenstat_linux.o
+ OBJECTS-$(CONFIG_SunOS) += src/xenstat_solaris.o
+ OBJECTS-$(CONFIG_NetBSD) += src/xenstat_netbsd.o
+ OBJECTS-$(CONFIG_FreeBSD) += src/xenstat_freebsd.o
+-SONAME_FLAGS=-Wl,$(SONAME_LDFLAG) -Wl,libxenstat.so.$(MAJOR)
++SONAME_FLAGS=-Wl,$(SONAME_LDFLAG),libxenstat.so
+ CFLAGS+=-fPIC
+ CFLAGS+=-Isrc $(CFLAGS_libxenctrl) $(CFLAGS_libxenstore) $(CFLAGS_xeninclude) -include $(XEN_ROOT)/tools/config.h
+@@ -38,7 +34,7 @@ LDLIBS-y = $(LDLIBS_libxenstore) $(LDLIB
+ LDLIBS-$(CONFIG_SunOS) += -lkstat
+ PKG_CONFIG := xenstat.pc
+-PKG_CONFIG_VERSION := $(MAJOR).$(MINOR)
++PKG_CONFIG_VERSION := $(PACKAGE_VERSION)
+ ifneq ($(CONFIG_LIBXC_MINIOS),y)
+ PKG_CONFIG_INST := $(PKG_CONFIG)
+@@ -54,7 +50,7 @@ $(PKG_CONFIG_LOCAL): PKG_CONFIG_INCDIR =
+ $(PKG_CONFIG_LOCAL): PKG_CONFIG_LIBDIR = $(CURDIR)
+ .PHONY: all
+-all: $(LIB) $(SHLIB) $(SHLIB_LINKS) $(PKG_CONFIG_INST) $(PKG_CONFIG_LOCAL)
++all: $(LIB) $(SHLIB) $(PKG_CONFIG_INST) $(PKG_CONFIG_LOCAL)
+ $(OBJECTS-y): src/_paths.h
+@@ -66,27 +62,17 @@ $(SHLIB): $(OBJECTS-y)
+       $(CC) $(LDFLAGS) $(SONAME_FLAGS) $(SHLIB_LDFLAGS) -o $@ \
+           $(OBJECTS-y) $(LDLIBS-y) $(APPEND_LDFLAGS)
+-src/libxenstat.so.$(MAJOR): $(SHLIB)
+-      $(MAKE_LINK) $(<F) $@
+-
+-src/libxenstat.so: src/libxenstat.so.$(MAJOR)
+-      $(MAKE_LINK) $(<F) $@
+-
+ .PHONY: install
+ install: all
+       $(INSTALL_DATA) src/xenstat.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) $(LIB) $(DESTDIR)$(libdir)/libxenstat.a
+-      $(INSTALL_PROG) src/libxenstat.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
+-      ln -sf libxenstat.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenstat.so.$(MAJOR)
+-      ln -sf libxenstat.so.$(MAJOR) $(DESTDIR)$(libdir)/libxenstat.so
++      $(INSTALL_PROG) src/libxenstat.so $(DESTDIR)$(libdir)
+       $(INSTALL_DATA) xenstat.pc $(DESTDIR)$(PKG_INSTALLDIR)
+ .PHONY: uninstall
+ uninstall:
+       rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xenstat.pc
+       rm -f $(DESTDIR)$(libdir)/libxenstat.so
+-      rm -f $(DESTDIR)$(libdir)/libxenstat.so.$(MAJOR)
+-      rm -f $(DESTDIR)$(libdir)/libxenstat.so.$(MAJOR).$(MINOR)
+       rm -f $(DESTDIR)$(libdir)/libxenstat.a
+       rm -f $(DESTDIR)$(includedir)/xenstat.h
diff --git a/patches/prefix-abiname/tools-xenstat-prefix.diff b/patches/prefix-abiname/tools-xenstat-prefix.diff
new file mode 100644 (file)
index 0000000..2847db4
--- /dev/null
@@ -0,0 +1,70 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:47:09 +0200
+Subject: tools-xenstat-prefix.diff
+
+Patch-Name: tools-xenstat-prefix.diff
+
+---
+
+--- a/tools/xenstat/libxenstat/Makefile
++++ b/tools/xenstat/libxenstat/Makefile
+@@ -20,7 +20,7 @@ MAKE_LINK=ln -sf
+ LIB=src/libxenstat.a
+ SHLIB=src/libxenstat.so
+-OBJECTS-y=src/xenstat.o
++OBJECTS-y=src/xenstat.o src/xenstat_qmp.o
+ OBJECTS-$(CONFIG_Linux) += src/xenstat_linux.o
+ OBJECTS-$(CONFIG_SunOS) += src/xenstat_solaris.o
+ OBJECTS-$(CONFIG_NetBSD) += src/xenstat_netbsd.o
+@@ -64,17 +64,19 @@ $(SHLIB): $(OBJECTS-y)
+ .PHONY: install
+ install: all
++      $(INSTALL_DIR) $(DESTDIR)$(includedir)
++      $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_LIB)
+       $(INSTALL_DATA) src/xenstat.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) $(LIB) $(DESTDIR)$(libdir)/libxenstat.a
+-      $(INSTALL_PROG) src/libxenstat.so $(DESTDIR)$(libdir)
++      $(INSTALL_PROG) src/libxenstat.so $(DESTDIR)$(LIBEXEC_LIB)
+       $(INSTALL_DATA) xenstat.pc $(DESTDIR)$(PKG_INSTALLDIR)
+ .PHONY: uninstall
+ uninstall:
+       rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xenstat.pc
+-      rm -f $(DESTDIR)$(libdir)/libxenstat.so
++      rm -f $(DESTDIR)$(LIBEXEC_LIB)/libxenstat.so
+       rm -f $(DESTDIR)$(libdir)/libxenstat.a
+-      rm -f $(DESTDIR)$(includedir)/xenstat.h
++      rm -f $(DESTDIR)$(LIBEXEC_LIB)/xenstat.h
+ PYLIB=bindings/swig/python/_xenstat.so
+ PYMOD=bindings/swig/python/xenstat.py
+--- a/tools/xenstat/xentop/Makefile
++++ b/tools/xenstat/xentop/Makefile
+@@ -19,7 +19,9 @@ all install xentop uninstall:
+ else
+ CFLAGS += -DGCC_PRINTF -Werror $(CFLAGS_libxenstat)
++LDFLAGS += $(call LDFLAGS_RPATH,../lib)
+ LDLIBS += $(LDLIBS_libxenstat) $(CURSES_LIBS) $(TINFO_LIBS) $(SOCKET_LIBS) -lm
++LDLIBS += $(LDLIBS_libxenctrl) $(LDLIBS_libxenstore)
+ CFLAGS += -DHOST_$(XEN_OS)
+ # Include configure output (config.h)
+@@ -31,12 +33,12 @@ all: xentop
+ .PHONY: install
+ install: xentop
+-      $(INSTALL_DIR) $(DESTDIR)$(sbindir)
+-      $(INSTALL_PROG) xentop $(DESTDIR)$(sbindir)/xentop
++      $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN)
++      $(INSTALL_PROG) xentop $(DESTDIR)$(LIBEXEC_BIN)/xentop
+ .PHONY: uninstall
+ uninstall:
+-      rm -f $(DESTDIR)$(sbindir)/xentop
++      rm -f $(DESTDIR)$(LIBEXEC_BIN)/xentop
+ endif
diff --git a/patches/prefix-abiname/tools-xenstore-prefix.diff b/patches/prefix-abiname/tools-xenstore-prefix.diff
new file mode 100644 (file)
index 0000000..4f529cc
--- /dev/null
@@ -0,0 +1,68 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:47:12 +0200
+Subject: tools-xenstore-prefix.diff
+
+Patch-Name: tools-xenstore-prefix.diff
+
+---
+
+--- a/tools/helpers/Makefile
++++ b/tools/helpers/Makefile
+@@ -31,7 +31,7 @@ xen-init-dom0: $(XEN_INIT_DOM0_OBJS)
+ $(INIT_XENSTORE_DOMAIN_OBJS): _paths.h
+ init-xenstore-domain: $(INIT_XENSTORE_DOMAIN_OBJS)
+-      $(CC) $(LDFLAGS) -o $@ $(INIT_XENSTORE_DOMAIN_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxenstore) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenlight) $(APPEND_LDFLAGS)
++      $(CC) $(LDFLAGS) -o $@ $(INIT_XENSTORE_DOMAIN_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxenstore) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenlight) $(call LDFLAGS_RPATH,../lib) $(APPEND_LDFLAGS)
+ .PHONY: install
+ install: all
+--- a/tools/xenstore/Makefile
++++ b/tools/xenstore/Makefile
+@@ -18,6 +18,8 @@ CFLAGS += -DXEN_RUN_STORED="\"$(XEN_RUN_
+ CFLAGS  += $(CFLAGS-y)
+ LDFLAGS += $(LDFLAGS-y)
++LDFLAGS_libxenctrl += $(call LDFLAGS_RPATH,../lib)
++
+ CLIENTS := xenstore-exists xenstore-list xenstore-read xenstore-rm xenstore-chmod
+ CLIENTS += xenstore-write xenstore-ls xenstore-watch
+@@ -79,7 +81,7 @@ endif
+ $(XENSTORED_OBJS): CFLAGS += $(CFLAGS_libxengnttab)
+ xenstored: $(XENSTORED_OBJS)
+-      $(CC) $^ $(LDFLAGS) $(LDLIBS_libxenevtchn) $(LDLIBS_libxengnttab) $(LDLIBS_libxenctrl) $(LDLIBS_xenstored) $(SOCKET_LIBS) -o $@ $(APPEND_LDFLAGS)
++      $(CC) $^ $(LDFLAGS) $(LDLIBS_libxenevtchn) $(LDLIBS_libxengnttab) $(LDLIBS_libxenctrl) $(LDLIBS_xenstored) $(SOCKET_LIBS) $(call LDFLAGS_RPATH,../lib) -o $@ $(APPEND_LDFLAGS)
+ xenstored.a: $(XENSTORED_OBJS)
+       $(AR) cr $@ $^
+@@ -158,13 +160,13 @@ tarball: clean
+ install: all
+       $(INSTALL_DIR) $(DESTDIR)$(bindir)
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)
++      $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN)
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)/xenstore-compat
+ ifeq ($(XENSTORE_XENSTORED),y)
+-      $(INSTALL_DIR) $(DESTDIR)$(sbindir)
+       $(INSTALL_DIR) $(DESTDIR)$(XEN_LIB_STORED)
+-      $(INSTALL_PROG) xenstored $(DESTDIR)$(sbindir)
++      $(INSTALL_PROG) xenstored $(DESTDIR)$(LIBEXEC_BIN)
+ endif
+-      $(INSTALL_PROG) xenstore-control $(DESTDIR)$(bindir)
++      $(INSTALL_PROG) xenstore-control $(DESTDIR)$(LIBEXEC_BIN)
+       $(INSTALL_PROG) xenstore $(DESTDIR)$(bindir)
+       set -e ; for c in $(CLIENTS) ; do \
+               ln -f $(DESTDIR)$(bindir)/xenstore $(DESTDIR)$(bindir)/$${c} ; \
+@@ -197,9 +199,9 @@ uninstall:
+       rm -f $(DESTDIR)$(libdir)/libxenstore.so.$(MAJOR).$(MINOR)
+       rm -f $(addprefix $(DESTDIR)$(bindir)/, $(CLIENTS))
+       rm -f $(DESTDIR)$(bindir)/xenstore
+-      rm -f $(DESTDIR)$(bindir)/xenstore-control
++      rm -f $(DESTDIR)$(LIBEXEC_BIN)/xenstore-control
+ ifeq ($(XENSTORE_XENSTORED),y)
+-      rm -f $(DESTDIR)$(sbindir)/xenstored
++      rm -f $(DESTDIR)$(LIBEXEC_BIN)/xenstored
+       if [ -d $(DESTDIR)$(XEN_LIB_STORED) ]; then \
+               rmdir --ignore-fail-on-non-empty $(DESTDIR)$(XEN_LIB_STORED); \
+       fi
diff --git a/patches/prefix-abiname/tools-xentoolcore-abiname.patch b/patches/prefix-abiname/tools-xentoolcore-abiname.patch
new file mode 100644 (file)
index 0000000..11a2653
--- /dev/null
@@ -0,0 +1,52 @@
+--- a/tools/libs/toolcore/Makefile
++++ b/tools/libs/toolcore/Makefile
+@@ -59,22 +59,22 @@ include/_xentoolcore_list.h: $(XEN_INCLU
+ libxentoolcore.a: $(LIB_OBJS)
+       $(AR) rc $@ $^
+-libxentoolcore.so: libxentoolcore.so.$(MAJOR)
++libxentoolcore.so: libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR)
+       $(SYMLINK_SHLIB) $< $@
+-libxentoolcore.so.$(MAJOR): libxentoolcore.so.$(MAJOR).$(MINOR)
++libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR): libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR)
+       $(SYMLINK_SHLIB) $< $@
+-libxentoolcore.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxentoolcore.map
+-      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxentoolcore.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(APPEND_LDFLAGS)
++libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxentoolcore.map
++      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(APPEND_LDFLAGS)
+ .PHONY: install
+ install: build
+       $(INSTALL_DIR) $(DESTDIR)$(libdir)
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)
+-      $(INSTALL_SHLIB) libxentoolcore.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
++      $(INSTALL_SHLIB) libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
+       $(INSTALL_DATA) libxentoolcore.a $(DESTDIR)$(libdir)
+-      $(SYMLINK_SHLIB) libxentoolcore.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxentoolcore.so.$(MAJOR)
+-      $(SYMLINK_SHLIB) libxentoolcore.so.$(MAJOR) $(DESTDIR)$(libdir)/libxentoolcore.so
++      $(SYMLINK_SHLIB) libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR)
++      $(SYMLINK_SHLIB) libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR) $(DESTDIR)$(libdir)/libxentoolcore.so
+       $(INSTALL_DATA) include/xentoolcore.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) xentoolcore.pc $(DESTDIR)$(PKG_INSTALLDIR)
+@@ -83,8 +83,8 @@ uninstall:
+       rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xentoolcore.pc
+       rm -f $(DESTDIR)$(includedir)/xentoolcore.h
+       rm -f $(DESTDIR)$(libdir)/libxentoolcore.so
+-      rm -f $(DESTDIR)$(libdir)/libxentoolcore.so.$(MAJOR)
+-      rm -f $(DESTDIR)$(libdir)/libxentoolcore.so.$(MAJOR).$(MINOR)
++      rm -f $(DESTDIR)$(libdir)/libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR)
++      rm -f $(DESTDIR)$(libdir)/libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR)
+       rm -f $(DESTDIR)$(libdir)/libxentoolcore.a
+ .PHONY: TAGS
+@@ -94,7 +94,7 @@ TAGS:
+ .PHONY: clean
+ clean:
+       rm -rf *.rpm $(LIB) *~ $(DEPS_RM) $(LIB_OBJS) $(PIC_OBJS)
+-      rm -f libxentoolcore.so.$(MAJOR).$(MINOR) libxentoolcore.so.$(MAJOR)
++      rm -f libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) libxentoolcore-$(PACKAGE_VERSION).so.$(MAJOR)
+       rm -f headers.chk
+       rm -f xentoolcore.pc
diff --git a/patches/prefix-abiname/tools-xentrace-prefix.diff b/patches/prefix-abiname/tools-xentrace-prefix.diff
new file mode 100644 (file)
index 0000000..02caac0
--- /dev/null
@@ -0,0 +1,46 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:47:14 +0200
+Subject: tools-xentrace-prefix.diff
+
+Patch-Name: tools-xentrace-prefix.diff
+
+---
+
+--- a/tools/xentrace/Makefile
++++ b/tools/xentrace/Makefile
+@@ -8,6 +8,7 @@ CFLAGS += $(CFLAGS_libxenctrl)
+ LDLIBS += $(LDLIBS_libxenevtchn)
+ LDLIBS += $(LDLIBS_libxenctrl)
+ LDLIBS += $(ARGP_LDFLAGS)
++LDFLAGS += $(call LDFLAGS_RPATH,../lib)
+ BIN-$(CONFIG_X86) = xenalyze
+ BIN      = $(BIN-y)
+@@ -23,21 +24,19 @@ build: $(BIN) $(SBIN) $(LIBBIN)
+ .PHONY: install
+ install: build
+-      $(INSTALL_DIR) $(DESTDIR)$(bindir)
+-      $(INSTALL_DIR) $(DESTDIR)$(sbindir)
+-      [ -z "$(LIBBIN)" ] || $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN)
++      $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN)
+ ifneq ($(BIN),)
+-      $(INSTALL_PROG) $(BIN) $(DESTDIR)$(bindir)
++      $(INSTALL_PROG) $(BIN) $(DESTDIR)$(LIBEXEC_BIN)
+ endif
+-      $(INSTALL_PROG) $(SBIN) $(DESTDIR)$(sbindir)
+-      $(INSTALL_PYTHON_PROG) $(SCRIPTS) $(DESTDIR)$(bindir)
++      $(INSTALL_PROG) $(SBIN) $(DESTDIR)$(LIBEXEC_BIN)
++      $(INSTALL_PYTHON_PROG) $(SCRIPTS) $(DESTDIR)$(LIBEXEC_BIN)
+       [ -z "$(LIBBIN)" ] || $(INSTALL_PROG) $(LIBBIN) $(DESTDIR)$(LIBEXEC_BIN)
+ .PHONY: uninstall
+ uninstall:
+       rm -f $(addprefix $(DESTDIR)$(LIBEXEC_BIN)/, $(LIBBIN))
+-      rm -f $(addprefix $(DESTDIR)$(bindir)/, $(SCRIPTS))
+-      rm -f $(addprefix $(DESTDIR)$(sbindir)/, $(SBIN))
++      rm -f $(addprefix $(DESTDIR)$(LIBEXEC_BIN)/, $(SCRIPTS))
++      rm -f $(addprefix $(DESTDIR)$(LIBEXEC_BIN)/, $(SBIN))
+ ifneq ($(BIN),)
+       rm -f $(addprefix $(DESTDIR)$(bindir)/, $(BIN))
+ endif
diff --git a/patches/prefix-abiname/ubuntu-tools-libs-abiname.diff b/patches/prefix-abiname/ubuntu-tools-libs-abiname.diff
new file mode 100644 (file)
index 0000000..2af1837
--- /dev/null
@@ -0,0 +1,308 @@
+From: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Date: Thu, 6 Oct 2016 14:24:46 +0100
+Subject: ubuntu-tools-libs-abiname
+
+
+---
+
+--- a/tools/libs/call/Makefile
++++ b/tools/libs/call/Makefile
+@@ -56,22 +56,22 @@ headers.chk: $(wildcard include/*.h)
+ libxencall.a: $(LIB_OBJS)
+       $(AR) rc $@ $^
+-libxencall.so: libxencall.so.$(MAJOR)
++libxencall.so: libxencall-$(PACKAGE_VERSION).so.$(MAJOR)
+       $(SYMLINK_SHLIB) $< $@
+-libxencall.so.$(MAJOR): libxencall.so.$(MAJOR).$(MINOR)
++libxencall-$(PACKAGE_VERSION).so.$(MAJOR): libxencall-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR)
+       $(SYMLINK_SHLIB) $< $@
+-libxencall.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxencall.map
+-      $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxencall.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS)
++libxencall-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxencall.map
++      $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxencall-$(PACKAGE_VERSION).so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS)
+ .PHONY: install
+ install: build
+       $(INSTALL_DIR) $(DESTDIR)$(libdir)
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)
+-      $(INSTALL_SHLIB) libxencall.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
++      $(INSTALL_SHLIB) libxencall-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
+       $(INSTALL_DATA) libxencall.a $(DESTDIR)$(libdir)
+-      $(SYMLINK_SHLIB) libxencall.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxencall.so.$(MAJOR)
+-      $(SYMLINK_SHLIB) libxencall.so.$(MAJOR) $(DESTDIR)$(libdir)/libxencall.so
++      $(SYMLINK_SHLIB) libxencall-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxencall-$(PACKAGE_VERSION).so.$(MAJOR)
++      $(SYMLINK_SHLIB) libxencall-$(PACKAGE_VERSION).so.$(MAJOR) $(DESTDIR)$(libdir)/libxencall.so
+       $(INSTALL_DATA) include/xencall.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) xencall.pc $(DESTDIR)$(PKG_INSTALLDIR)
+@@ -80,8 +80,8 @@ uninstall:
+       rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xencall.pc
+       rm -f $(DESTDIR)$(includedir)/xencall.h
+       rm -f $(DESTDIR)$(libdir)/libxencall.so
+-      rm -f $(DESTDIR)$(libdir)/libxencall.so.$(MAJOR)
+-      rm -f $(DESTDIR)$(libdir)/libxencall.so.$(MAJOR).$(MINOR)
++      rm -f $(DESTDIR)$(libdir)/libxencall-$(PACKAGE_VERSION).so.$(MAJOR)
++      rm -f $(DESTDIR)$(libdir)/libxencall-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR)
+       rm -f $(DESTDIR)$(libdir)/libxencall.a
+ .PHONY: TAGS
+@@ -91,7 +91,7 @@ TAGS:
+ .PHONY: clean
+ clean:
+       rm -rf *.rpm $(LIB) *~ $(DEPS_RM) $(LIB_OBJS) $(PIC_OBJS)
+-      rm -f libxencall.so.$(MAJOR).$(MINOR) libxencall.so.$(MAJOR)
++      rm -f libxencall-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) libxencall-$(PACKAGE_VERSION).so.$(MAJOR)
+       rm -f headers.chk
+       rm -f xencall.pc
+--- a/tools/libs/toollog/Makefile
++++ b/tools/libs/toollog/Makefile
+@@ -50,22 +50,22 @@ headers.chk: $(wildcard include/*.h)
+ libxentoollog.a: $(LIB_OBJS)
+       $(AR) rc $@ $^
+-libxentoollog.so: libxentoollog.so.$(MAJOR)
++libxentoollog.so: libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR)
+       $(SYMLINK_SHLIB) $< $@
+-libxentoollog.so.$(MAJOR): libxentoollog.so.$(MAJOR).$(MINOR)
++libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR): libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR)
+       $(SYMLINK_SHLIB) $< $@
+-libxentoollog.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxentoollog.map
+-      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxentoollog.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(APPEND_LDFLAGS)
++libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxentoollog.map
++      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(APPEND_LDFLAGS)
+ .PHONY: install
+ install: build
+       $(INSTALL_DIR) $(DESTDIR)$(libdir)
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)
+-      $(INSTALL_SHLIB) libxentoollog.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
++      $(INSTALL_SHLIB) libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
+       $(INSTALL_DATA) libxentoollog.a $(DESTDIR)$(libdir)
+-      $(SYMLINK_SHLIB) libxentoollog.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxentoollog.so.$(MAJOR)
+-      $(SYMLINK_SHLIB) libxentoollog.so.$(MAJOR) $(DESTDIR)$(libdir)/libxentoollog.so
++      $(SYMLINK_SHLIB) libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR)
++      $(SYMLINK_SHLIB) libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR) $(DESTDIR)$(libdir)/libxentoollog.so
+       $(INSTALL_DATA) include/xentoollog.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) xentoollog.pc $(DESTDIR)$(PKG_INSTALLDIR)
+@@ -74,8 +74,8 @@ uninstall:
+       rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xentoollog.pc
+       rm -f $(DESTDIR)$(includedir)/xentoollog.h
+       rm -f $(DESTDIR)$(libdir)/libxentoollog.so
+-      rm -f $(DESTDIR)$(libdir)/libxentoollog.so.$(MAJOR)
+-      rm -f $(DESTDIR)$(libdir)/libxentoollog.so.$(MAJOR).$(MINOR)
++      rm -f $(DESTDIR)$(libdir)/libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR)
++      rm -f $(DESTDIR)$(libdir)/libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR)
+       rm -f $(DESTDIR)$(libdir)/libxentoollog.a
+ .PHONY: TAGS
+@@ -85,7 +85,7 @@ TAGS:
+ .PHONY: clean
+ clean:
+       rm -rf *.rpm $(LIB) *~ $(DEPS_RM) $(LIB_OBJS) $(PIC_OBJS)
+-      rm -f libxentoollog.so.$(MAJOR).$(MINOR) libxentoollog.so.$(MAJOR)
++      rm -f libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) libxentoollog-$(PACKAGE_VERSION).so.$(MAJOR)
+       rm -f headers.chk
+       rm -f xentoollog.pc
+--- a/tools/libs/evtchn/Makefile
++++ b/tools/libs/evtchn/Makefile
+@@ -55,22 +55,22 @@ headers.chk: $(wildcard include/*.h)
+ libxenevtchn.a: $(LIB_OBJS)
+       $(AR) rc $@ $^
+-libxenevtchn.so: libxenevtchn.so.$(MAJOR)
++libxenevtchn.so: libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR)
+       $(SYMLINK_SHLIB) $< $@
+-libxenevtchn.so.$(MAJOR): libxenevtchn.so.$(MAJOR).$(MINOR)
++libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR): libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR)
+       $(SYMLINK_SHLIB) $< $@
+-libxenevtchn.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxenevtchn.map
+-      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenevtchn.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS)
++libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxenevtchn.map
++      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS)
+ .PHONY: install
+ install: build
+       $(INSTALL_DIR) $(DESTDIR)$(libdir)
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)
+-      $(INSTALL_SHLIB) libxenevtchn.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
++      $(INSTALL_SHLIB) libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
+       $(INSTALL_DATA) libxenevtchn.a $(DESTDIR)$(libdir)
+-      $(SYMLINK_SHLIB) libxenevtchn.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenevtchn.so.$(MAJOR)
+-      $(SYMLINK_SHLIB) libxenevtchn.so.$(MAJOR) $(DESTDIR)$(libdir)/libxenevtchn.so
++      $(SYMLINK_SHLIB) libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR)
++      $(SYMLINK_SHLIB) libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR) $(DESTDIR)$(libdir)/libxenevtchn.so
+       $(INSTALL_DATA) include/xenevtchn.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) xenevtchn.pc $(DESTDIR)$(PKG_INSTALLDIR)
+@@ -79,7 +79,7 @@ uninstall:
+       rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xenevtchn.pc
+       rm -f $(DESTDIR)$(includedir)/xenevtchn.h
+       rm -f $(DESTDIR)$(libdir)/libxenevtchn.so
+-      rm -f $(DESTDIR)$(libdir)/libxenevtchn.so.$(MAJOR)
++      rm -f $(DESTDIR)$(libdir)/libxenevtchn-$(PACKAGE_VERSION).so.$(MAJOR)
+       rm -f $(DESTDIR)$(libdir)/libxenevtchn.so.$(MAJOR).$(MINOR)
+       rm -f $(DESTDIR)$(libdir)/libxenevtchn.a
+--- a/tools/libs/foreignmemory/Makefile
++++ b/tools/libs/foreignmemory/Makefile
+@@ -56,22 +56,22 @@ headers.chk: $(wildcard include/*.h)
+ libxenforeignmemory.a: $(LIB_OBJS)
+       $(AR) rc $@ $^
+-libxenforeignmemory.so: libxenforeignmemory.so.$(MAJOR)
++libxenforeignmemory.so: libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR)
+       $(SYMLINK_SHLIB) $< $@
+-libxenforeignmemory.so.$(MAJOR): libxenforeignmemory.so.$(MAJOR).$(MINOR)
++libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR): libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR)
+       $(SYMLINK_SHLIB) $< $@
+-libxenforeignmemory.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxenforeignmemory.map
+-      $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenforeignmemory.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS)
++libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxenforeignmemory.map
++      $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS)
+ .PHONY: install
+ install: build
+       $(INSTALL_DIR) $(DESTDIR)$(libdir)
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)
+-      $(INSTALL_SHLIB) libxenforeignmemory.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
++      $(INSTALL_SHLIB) libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
+       $(INSTALL_DATA) libxenforeignmemory.a $(DESTDIR)$(libdir)
+-      $(SYMLINK_SHLIB) libxenforeignmemory.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenforeignmemory.so.$(MAJOR)
+-      $(SYMLINK_SHLIB) libxenforeignmemory.so.$(MAJOR) $(DESTDIR)$(libdir)/libxenforeignmemory.so
++      $(SYMLINK_SHLIB) libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR)
++      $(SYMLINK_SHLIB) libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR) $(DESTDIR)$(libdir)/libxenforeignmemory.so
+       $(INSTALL_DATA) include/xenforeignmemory.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) xenforeignmemory.pc $(DESTDIR)$(PKG_INSTALLDIR)
+@@ -80,8 +80,8 @@ uninstall:
+       rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xenforeignmemory.pc
+       rm -f $(DESTDIR)$(includedir)/xenforeignmemory.h
+       rm -f $(DESTDIR)$(libdir)/libxenforeignmemory.so
+-      rm -f $(DESTDIR)$(libdir)/libxenforeignmemory.so.$(MAJOR)
+-      rm -f $(DESTDIR)$(libdir)/libxenforeignmemory.so.$(MAJOR).$(MINOR)
++      rm -f $(DESTDIR)$(libdir)/libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR)
++      rm -f $(DESTDIR)$(libdir)/libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR)
+       rm -f $(DESTDIR)$(libdir)/libxenforeignmemory.a
+ .PHONY: TAGS
+@@ -91,7 +91,7 @@ TAGS:
+ .PHONY: clean
+ clean:
+       rm -rf *.rpm $(LIB) *~ $(DEPS_RM) $(LIB_OBJS) $(PIC_OBJS)
+-      rm -f libxenforeignmemory.so.$(MAJOR).$(MINOR) libxenforeignmemory.so.$(MAJOR)
++      rm -f libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) libxenforeignmemory-$(PACKAGE_VERSION).so.$(MAJOR)
+       rm -f headers.chk
+       rm -f xenforeignmemory.pc
+--- a/tools/libs/gnttab/Makefile
++++ b/tools/libs/gnttab/Makefile
+@@ -58,22 +58,22 @@ headers.chk: $(wildcard include/*.h)
+ libxengnttab.a: $(LIB_OBJS)
+       $(AR) rc $@ $^
+-libxengnttab.so: libxengnttab.so.$(MAJOR)
++libxengnttab.so: libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR)
+       $(SYMLINK_SHLIB) $< $@
+-libxengnttab.so.$(MAJOR): libxengnttab.so.$(MAJOR).$(MINOR)
++libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR): libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR)
+       $(SYMLINK_SHLIB) $< $@
+-libxengnttab.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxengnttab.map
+-      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxengnttab.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS)
++libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxengnttab.map
++      $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS)
+ .PHONY: install
+ install: build
+       $(INSTALL_DIR) $(DESTDIR)$(libdir)
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)
+-      $(INSTALL_SHLIB) libxengnttab.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
++      $(INSTALL_SHLIB) libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
+       $(INSTALL_DATA) libxengnttab.a $(DESTDIR)$(libdir)
+-      $(SYMLINK_SHLIB) libxengnttab.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxengnttab.so.$(MAJOR)
+-      $(SYMLINK_SHLIB) libxengnttab.so.$(MAJOR) $(DESTDIR)$(libdir)/libxengnttab.so
++      $(SYMLINK_SHLIB) libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR)
++      $(SYMLINK_SHLIB) libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR) $(DESTDIR)$(libdir)/libxengnttab.so
+       $(INSTALL_DATA) include/xengnttab.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) xengnttab.pc $(DESTDIR)$(PKG_INSTALLDIR)
+@@ -82,8 +82,8 @@ uninstall:
+       rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xengnttab.pc
+       rm -f $(DESTDIR)$(includedir)/xengnttab.h
+       rm -f $(DESTDIR)$(libdir)/libxengnttab.so
+-      rm -f $(DESTDIR)$(libdir)/libxengnttab.so.$(MAJOR)
+-      rm -f $(DESTDIR)$(libdir)/libxengnttab.so.$(MAJOR).$(MINOR)
++      rm -f $(DESTDIR)$(libdir)/libxengnttab.so-$(PACKAGE_VERSION).$(MAJOR)
++      rm -f $(DESTDIR)$(libdir)/libxengnttab.so-$(PACKAGE_VERSION).$(MAJOR).$(MINOR)
+       rm -f $(DESTDIR)$(libdir)/libxengnttab.a
+ .PHONY: TAGS
+@@ -93,7 +93,7 @@ TAGS:
+ .PHONY: clean
+ clean:
+       rm -rf *.rpm $(LIB) *~ $(DEPS_RM) $(LIB_OBJS) $(PIC_OBJS)
+-      rm -f libxengnttab.so.$(MAJOR).$(MINOR) libxengnttab.so.$(MAJOR)
++      rm -f libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) libxengnttab-$(PACKAGE_VERSION).so.$(MAJOR)
+       rm -f headers.chk
+       rm -f xengnttab.pc
+--- a/tools/libs/devicemodel/Makefile
++++ b/tools/libs/devicemodel/Makefile
+@@ -58,22 +58,22 @@ headers.chk: $(wildcard include/*.h)
+ libxendevicemodel.a: $(LIB_OBJS)
+       $(AR) rc $@ $^
+-libxendevicemodel.so: libxendevicemodel.so.$(MAJOR)
++libxendevicemodel.so: libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR)
+       $(SYMLINK_SHLIB) $< $@
+-libxendevicemodel.so.$(MAJOR): libxendevicemodel.so.$(MAJOR).$(MINOR)
++libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR): libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR)
+       $(SYMLINK_SHLIB) $< $@
+-libxendevicemodel.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxendevicemodel.map
+-      $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxendevicemodel.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxencall) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS)
++libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxendevicemodel.map
++      $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxencall) $(APPEND_LDFLAGS)
+ .PHONY: install
+ install: build
+       $(INSTALL_DIR) $(DESTDIR)$(libdir)
+       $(INSTALL_DIR) $(DESTDIR)$(includedir)
+-      $(INSTALL_SHLIB) libxendevicemodel.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
++      $(INSTALL_SHLIB) libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)
+       $(INSTALL_DATA) libxendevicemodel.a $(DESTDIR)$(libdir)
+-      $(SYMLINK_SHLIB) libxendevicemodel.so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxendevicemodel.so.$(MAJOR)
+-      $(SYMLINK_SHLIB) libxendevicemodel.so.$(MAJOR) $(DESTDIR)$(libdir)/libxendevicemodel.so
++      $(SYMLINK_SHLIB) libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) $(DESTDIR)$(libdir)/libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR)
++      $(SYMLINK_SHLIB) libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR) $(DESTDIR)$(libdir)/libxendevicemodel.so
+       $(INSTALL_DATA) include/xendevicemodel.h $(DESTDIR)$(includedir)
+       $(INSTALL_DATA) xendevicemodel.pc $(DESTDIR)$(PKG_INSTALLDIR)
+@@ -82,8 +82,8 @@ uninstall:
+       rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xendevicemodel.pc
+       rm -f $(DESTDIR)$(includedir)/xendevicemodel.h
+       rm -f $(DESTDIR)$(libdir)/libxendevicemodel.so
+-      rm -f $(DESTDIR)$(libdir)/libxendevicemodel.so.$(MAJOR)
+-      rm -f $(DESTDIR)$(libdir)/libxendevicemodel.so.$(MAJOR).$(MINOR)
++      rm -f $(DESTDIR)$(libdir)/libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR)
++      rm -f $(DESTDIR)$(libdir)/libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR)
+       rm -f $(DESTDIR)$(libdir)/libxendevicemodel.a
+ .PHONY: TAGS
+@@ -93,7 +93,7 @@ TAGS:
+ .PHONY: clean
+ clean:
+       rm -rf *.rpm $(LIB) *~ $(DEPS_RM) $(LIB_OBJS) $(PIC_OBJS)
+-      rm -f libxendevicemodel.so.$(MAJOR).$(MINOR) libxendevicemodel.so.$(MAJOR)
++      rm -f libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR).$(MINOR) libxendevicemodel-$(PACKAGE_VERSION).so.$(MAJOR)
+       rm -f headers.chk
+       rm -f xendevicemodel.pc
diff --git a/patches/series b/patches/series
new file mode 100644 (file)
index 0000000..0ee281b
--- /dev/null
@@ -0,0 +1,39 @@
+misc/version.diff
+
+#
+# The following set of patches puts the hypervisor <-> tools ABI version into
+# .so file names and changes paths where tools are installed to include this
+# version number.
+#
+prefix-abiname/config-prefix.diff
+prefix-abiname/tools-libfsimage-abiname.diff
+prefix-abiname/tools-libxc-abiname.diff
+prefix-abiname/tools-libxl-abiname.diff
+prefix-abiname/tools-xenstat-abiname.diff
+prefix-abiname/tools-rpath.diff
+prefix-abiname/tools-blktap2-prefix.diff
+prefix-abiname/tools-console-prefix.diff
+prefix-abiname/tools-libfsimage-prefix.diff
+prefix-abiname/tools-libxl-prefix.diff
+prefix-abiname/tools-misc-prefix.diff
+prefix-abiname/tools-pygrub-prefix.diff
+prefix-abiname/tools-python-prefix.diff
+prefix-abiname/tools-xcutils-rpath.diff
+prefix-abiname/tools-xenmon-prefix.diff
+prefix-abiname/tools-xenpaging-prefix.diff
+prefix-abiname/tools-xenpmd-prefix.diff
+prefix-abiname/tools-xenstat-prefix.diff
+prefix-abiname/tools-xenstore-prefix.diff
+prefix-abiname/tools-xentrace-prefix.diff
+prefix-abiname/ubuntu-tools-libs-abiname.diff
+prefix-abiname/tools-xentoolcore-abiname.patch
+
+misc/tools-include-install.diff
+misc/tools-xenmon-install.diff
+misc/tools-pygrub-remove-static-solaris-support
+misc/toolstestsx86_emulator-pass--no-pie--fno.patch
+
+xenstore/tools-xenstore-compatibility.diff
+xenstore/tools-fake-xs-restrict.patch
+
+misc/tools-xentop-replace-use-of-deprecated-vwprintw.patch
diff --git a/patches/xenstore/tools-fake-xs-restrict.patch b/patches/xenstore/tools-fake-xs-restrict.patch
new file mode 100644 (file)
index 0000000..4f5a83b
--- /dev/null
@@ -0,0 +1,37 @@
+Description: Re-introduce fake xs_restrict API call
+ libxenstore cannot remove an API function without changing its version
+ number. As long as we want to remain with 3.0 we have to keep it around.
+ Debian might decide to increment the version at some point but we do not
+ know how and when. So for now keep the version stable.
+Author: Stefan Bader <stefan.bader@canonical.com>
+Forwarded: No
+
+--- a/tools/xenstore/include/xenstore.h
++++ b/tools/xenstore/include/xenstore.h
+@@ -133,6 +133,11 @@ bool xs_mkdir(struct xs_handle *h, xs_tr
+ bool xs_rm(struct xs_handle *h, xs_transaction_t t,
+          const char *path);
++/* Fake function which will always return false (required to let
++ * libxenstore remain at 3.0 version.
++ */
++bool xs_restrict(struct xs_handle *h, unsigned domid);
++
+ /* Get permissions of node (first element is owner, first perms is "other").
+  * Returns malloced array, or NULL: call free() after use.
+  */
+--- a/tools/xenstore/xs.c
++++ b/tools/xenstore/xs.c
+@@ -798,6 +798,12 @@ unwind:
+       return false;
+ }
++/* Always return false a functionality has been removed in Xen 4.9 */
++bool xs_restrict(struct xs_handle *h, unsigned domid)
++{
++      return false;
++}
++
+ /* Watch a node for changes (poll on fd to detect, or call read_watch()).
+  * When the node (or any child) changes, fd will become readable.
+  * Token is returned when watch is read, to allow matching.
diff --git a/patches/xenstore/tools-xenstore-compatibility.diff b/patches/xenstore/tools-xenstore-compatibility.diff
new file mode 100644 (file)
index 0000000..423c86c
--- /dev/null
@@ -0,0 +1,52 @@
+From: Bastian Blank <waldi@debian.org>
+Date: Sat, 5 Jul 2014 11:47:36 +0200
+Subject: tools-xenstore-compatibility.diff
+
+Patch-Name: tools-xenstore-compatibility.diff
+
+---
+
+--- a/tools/xenstore/include/xenstore.h
++++ b/tools/xenstore/include/xenstore.h
+@@ -25,6 +25,7 @@
+ #define XS_OPEN_READONLY      1UL<<0
+ #define XS_OPEN_SOCKETONLY      1UL<<1
++#define XS_OPEN_DOMAINONLY      1UL<<2
+ /*
+  * Setting XS_UNWATCH_FILTER arranges that after xs_unwatch, no
+--- a/tools/xenstore/xenstore_client.c
++++ b/tools/xenstore/xenstore_client.c
+@@ -636,7 +636,7 @@ main(int argc, char **argv)
+           max_width = ws.ws_col - 2;
+     }
+-    xsh = xs_open(socket ? XS_OPEN_SOCKETONLY : 0);
++    xsh = xs_open(socket ? XS_OPEN_SOCKETONLY : XS_OPEN_DOMAINONLY);
+     if (xsh == NULL) err(1, "xs_open");
+ again:
+--- a/tools/xenstore/xs.c
++++ b/tools/xenstore/xs.c
+@@ -307,17 +307,19 @@ struct xs_handle *xs_daemon_open_readonl
+ struct xs_handle *xs_domain_open(void)
+ {
+-      return xs_open(0);
++      return xs_open(XS_OPEN_DOMAINONLY);
+ }
+ struct xs_handle *xs_open(unsigned long flags)
+ {
+       struct xs_handle *xsh = NULL;
++      if (!(flags & XS_OPEN_DOMAINONLY)) {
+       if (flags & XS_OPEN_READONLY)
+               xsh = get_handle(xs_daemon_socket_ro());
+       else
+               xsh = get_handle(xs_daemon_socket());
++      }
+       if (!xsh && !(flags & XS_OPEN_SOCKETONLY))
+               xsh = get_handle(xs_domain_dev());
diff --git a/pycompat b/pycompat
new file mode 100644 (file)
index 0000000..0cfbf08
--- /dev/null
+++ b/pycompat
@@ -0,0 +1 @@
+2
diff --git a/rules b/rules
new file mode 100755 (executable)
index 0000000..a74bc9f
--- /dev/null
+++ b/rules
@@ -0,0 +1,90 @@
+#!/usr/bin/make -f
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+include /usr/share/dpkg/default.mk
+
+SHELL    := sh -e
+SOURCE := $(shell dpkg-parsechangelog -SSource)
+VERSION := $(shell dpkg-parsechangelog -SVersion)
+VERSION_UPSTREAM := $(shell echo "$(VERSION)" | sed -e 's,-[^-]*$$,,')
+VERSION_BINNMU := $(shell echo "$(VERSION)" | sed -rne 's,.*\+b([0-9]+)$$,\1,p')
+
+include debian/rules.defs
+
+setup: debian/control
+       dh_testdir
+       $(MAKE) -f debian/rules.gen setup_$(DEB_HOST_ARCH)
+
+build: build-arch build-indep
+
+build-arch: setup
+       dh_testdir
+       $(MAKE) -f debian/rules.gen build-arch_$(DEB_HOST_ARCH)
+
+build-indep: setup
+       dh_testdir
+       $(MAKE) -f debian/rules.gen build-indep
+
+maintainerclean:
+       rm -f debian/control* debian/rules.gen debian/xen-hypervisor-* debian/xen-utils-[0-9]*
+
+clean: debian/control
+       dh_testdir
+       rm -rf $(BUILD_DIR) $(STAMPS_DIR) debian/lib/python/debian_xen/__pycache__
+       rm -rf $(BUILD_DIR) $(STAMPS_DIR) debian/lib/python/debian_linux/__pycache__
+       dh_clean
+
+binary-indep:
+       dh_testdir
+       $(MAKE) -f debian/rules.gen binary-indep
+
+binary-arch:
+       dh_testdir
+       $(MAKE) -f debian/rules.gen binary-arch_$(DEB_HOST_ARCH)
+
+binary:        binary-indep binary-arch
+
+DIR_ORIG = ../orig/$(SOURCE)-$(VERSION_UPSTREAM)
+TAR_ORIG_NAME = $(SOURCE)_$(VERSION_UPSTREAM).orig.tar.xz
+TAR_ORIG = $(firstword $(wildcard ../$(TAR_ORIG_NAME)) $(wildcard ../orig/$(TAR_ORIG_NAME)))
+
+orig: $(DIR_ORIG)
+       rsync --delete --exclude /debian --exclude .git -a $(DIR_ORIG)/ .
+       QUILT_PATCHES='$(CURDIR)/debian/patches' QUILT_PC=.pc quilt push --quiltrc - -a -q --fuzz=0
+
+$(DIR_ORIG):
+ifeq ($(TAR_ORIG),)
+       $(error Cannot find orig tarball $(TAR_ORIG_NAME))
+else
+       mkdir -p ../orig
+       tar -C ../orig -xaf $(TAR_ORIG)
+endif
+
+CONTROL_FILES += debian/changelog debian/bin/gencontrol.py $(wildcard debian/templates/*.in) 
+CONTROL_FILES += $(wildcard debian/arch/defines) $(wildcard debian/arch/*/defines)
+GENCONTROL = $(__MODULES_DIR)gencontrol.py
+debian/control debian/rules.gen: $(CONTROL_FILES)
+ifeq ($(wildcard debian/control.md5sum),)
+       $(MAKE) -f debian/rules debian/control-real
+else ifeq ($(VERSION_BINNMU),)
+       md5sum --check debian/control.md5sum --status || \
+               $(MAKE) -f debian/rules debian/control-real
+else
+       grep -v debian/changelog debian/control.md5sum | md5sum --check - --status || \
+               $(MAKE) -f debian/rules debian/control-real
+endif
+
+debian/control-real: $(CONTROL_FILES)
+       debian/bin/gencontrol.py
+       md5sum $^ > debian/control.md5sum
+       @echo
+       @echo This target is made to fail intentionally, to make sure
+       @echo that it is NEVER run during the automated build. Please
+       @echo ignore the following error, the debian/control file has
+       @echo been generated SUCCESSFULLY.
+       @echo
+       exit 1
+
+.PHONY: clean build binary-indep binary-arch binary
diff --git a/rules.defs b/rules.defs
new file mode 100644 (file)
index 0000000..f070af0
--- /dev/null
@@ -0,0 +1,3 @@
+BUILD_DIR = debian/build
+STAMPS_DIR = debian/stamps
+TEMPLATES_DIR = debian/templates
diff --git a/rules.gen b/rules.gen
new file mode 100644 (file)
index 0000000..65c6c7b
--- /dev/null
+++ b/rules.gen
@@ -0,0 +1,128 @@
+.NOTPARALLEL:
+binary-arch: binary-arch_amd64 binary-arch_arm64 binary-arch_armhf binary-arch_i386
+binary-arch_amd64: binary-arch_amd64_none binary-arch_amd64_real
+binary-arch_amd64_none: binary-arch_amd64_none_amd64 binary-arch_amd64_none_real
+binary-arch_amd64_none_amd64:: binary-arch_amd64_none_amd64_real
+binary-arch_amd64_none_amd64::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ARCH='amd64' FEATURESET='none' FLAVOUR='amd64' IMAGE_SUFFIX='.gz' VERSION='4.11' XEN_ARCH='x86_64'
+       $(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='-pxen-system-amd64' ARCH='amd64' FEATURESET='none' FLAVOUR='amd64' IMAGE_SUFFIX='.gz' VERSION='4.11' XEN_ARCH='x86_64'
+binary-arch_amd64_none_amd64_real:
+binary-arch_amd64_none_real:
+binary-arch_amd64_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ARCH='amd64' VERSION='4.11' XEN_ARCH='x86_64'
+binary-arch_arm64: binary-arch_arm64_none binary-arch_arm64_real
+binary-arch_arm64_none: binary-arch_arm64_none_arm64 binary-arch_arm64_none_real
+binary-arch_arm64_none_arm64:: binary-arch_arm64_none_arm64_real
+binary-arch_arm64_none_arm64::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ARCH='arm64' FEATURESET='none' FLAVOUR='arm64' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm64'
+       $(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='-pxen-system-arm64' ARCH='arm64' FEATURESET='none' FLAVOUR='arm64' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm64'
+binary-arch_arm64_none_arm64_real:
+binary-arch_arm64_none_real:
+binary-arch_arm64_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ARCH='arm64' VERSION='4.11' XEN_ARCH='arm64'
+binary-arch_armhf: binary-arch_armhf_none binary-arch_armhf_real
+binary-arch_armhf_none: binary-arch_armhf_none_armhf binary-arch_armhf_none_real
+binary-arch_armhf_none_armhf:: binary-arch_armhf_none_armhf_real
+binary-arch_armhf_none_armhf::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ARCH='armhf' FEATURESET='none' FLAVOUR='armhf' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm32'
+       $(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='-pxen-system-armhf' ARCH='armhf' FEATURESET='none' FLAVOUR='armhf' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm32'
+binary-arch_armhf_none_armhf_real:
+binary-arch_armhf_none_real:
+binary-arch_armhf_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ARCH='armhf' VERSION='4.11' XEN_ARCH='arm32'
+binary-arch_i386: binary-arch_i386_none binary-arch_i386_real
+binary-arch_i386_none: binary-arch_i386_none_amd64 binary-arch_i386_none_real
+binary-arch_i386_none_amd64:: binary-arch_i386_none_amd64_real
+binary-arch_i386_none_amd64::
+       $(MAKE) -f debian/rules.real binary-arch-flavour ARCH='i386' FEATURESET='none' FLAVOUR='amd64' VERSION='4.11' XEN_ARCH='x86_64'
+       $(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='-pxen-system-amd64' ARCH='i386' FEATURESET='none' FLAVOUR='amd64' VERSION='4.11' XEN_ARCH='x86_64'
+binary-arch_i386_none_amd64_real:
+binary-arch_i386_none_real:
+binary-arch_i386_real::
+       $(MAKE) -f debian/rules.real binary-arch-arch ARCH='i386' VERSION='4.11' XEN_ARCH='x86_32'
+binary-indep:: binary-indep_none
+binary-indep::
+       $(MAKE) -f debian/rules.real binary-indep VERSION='4.11'
+binary-indep_none: binary-indep_none_real
+binary-indep_none_real:
+build-arch: build-arch_amd64 build-arch_arm64 build-arch_armhf build-arch_i386
+build-arch_amd64: build-arch_amd64_none build-arch_amd64_real
+build-arch_amd64_none: build-arch_amd64_none_amd64 build-arch_amd64_none_real
+build-arch_amd64_none_amd64:: build-arch_amd64_none_amd64_real
+build-arch_amd64_none_amd64::
+       $(MAKE) -f debian/rules.real build-arch-flavour ARCH='amd64' FEATURESET='none' FLAVOUR='amd64' IMAGE_SUFFIX='.gz' VERSION='4.11' XEN_ARCH='x86_64'
+build-arch_amd64_none_amd64_real:
+build-arch_amd64_none_real:
+build-arch_amd64_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ARCH='amd64' VERSION='4.11' XEN_ARCH='x86_64'
+build-arch_arm64: build-arch_arm64_none build-arch_arm64_real
+build-arch_arm64_none: build-arch_arm64_none_arm64 build-arch_arm64_none_real
+build-arch_arm64_none_arm64:: build-arch_arm64_none_arm64_real
+build-arch_arm64_none_arm64::
+       $(MAKE) -f debian/rules.real build-arch-flavour ARCH='arm64' FEATURESET='none' FLAVOUR='arm64' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm64'
+build-arch_arm64_none_arm64_real:
+build-arch_arm64_none_real:
+build-arch_arm64_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ARCH='arm64' VERSION='4.11' XEN_ARCH='arm64'
+build-arch_armhf: build-arch_armhf_none build-arch_armhf_real
+build-arch_armhf_none: build-arch_armhf_none_armhf build-arch_armhf_none_real
+build-arch_armhf_none_armhf:: build-arch_armhf_none_armhf_real
+build-arch_armhf_none_armhf::
+       $(MAKE) -f debian/rules.real build-arch-flavour ARCH='armhf' FEATURESET='none' FLAVOUR='armhf' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm32'
+build-arch_armhf_none_armhf_real:
+build-arch_armhf_none_real:
+build-arch_armhf_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ARCH='armhf' VERSION='4.11' XEN_ARCH='arm32'
+build-arch_i386: build-arch_i386_none build-arch_i386_real
+build-arch_i386_none: build-arch_i386_none_amd64 build-arch_i386_none_real
+build-arch_i386_none_amd64:: build-arch_i386_none_amd64_real
+build-arch_i386_none_amd64::
+       $(MAKE) -f debian/rules.real build-arch-flavour ARCH='i386' FEATURESET='none' FLAVOUR='amd64' VERSION='4.11' XEN_ARCH='x86_64'
+build-arch_i386_none_amd64_real:
+build-arch_i386_none_real:
+build-arch_i386_real::
+       $(MAKE) -f debian/rules.real build-arch-arch ARCH='i386' VERSION='4.11' XEN_ARCH='x86_32'
+build-indep:: build-indep_none
+build-indep::
+       $(MAKE) -f debian/rules.real build-indep VERSION='4.11'
+build-indep_none: build-indep_none_real
+build-indep_none_real:
+setup: setup_amd64 setup_arm64 setup_armhf setup_i386 setup_none
+setup_amd64: setup_amd64_none setup_amd64_real
+setup_amd64_none: setup_amd64_none_amd64 setup_amd64_none_real
+setup_amd64_none_amd64:: setup_amd64_none_amd64_real
+setup_amd64_none_amd64::
+       $(MAKE) -f debian/rules.real setup-flavour ARCH='amd64' FEATURESET='none' FLAVOUR='amd64' IMAGE_SUFFIX='.gz' VERSION='4.11' XEN_ARCH='x86_64'
+setup_amd64_none_amd64_real:
+setup_amd64_none_real:
+setup_amd64_real::
+       $(MAKE) -f debian/rules.real setup-arch ARCH='amd64' VERSION='4.11' XEN_ARCH='x86_64'
+setup_arm64: setup_arm64_none setup_arm64_real
+setup_arm64_none: setup_arm64_none_arm64 setup_arm64_none_real
+setup_arm64_none_arm64:: setup_arm64_none_arm64_real
+setup_arm64_none_arm64::
+       $(MAKE) -f debian/rules.real setup-flavour ARCH='arm64' FEATURESET='none' FLAVOUR='arm64' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm64'
+setup_arm64_none_arm64_real:
+setup_arm64_none_real:
+setup_arm64_real::
+       $(MAKE) -f debian/rules.real setup-arch ARCH='arm64' VERSION='4.11' XEN_ARCH='arm64'
+setup_armhf: setup_armhf_none setup_armhf_real
+setup_armhf_none: setup_armhf_none_armhf setup_armhf_none_real
+setup_armhf_none_armhf:: setup_armhf_none_armhf_real
+setup_armhf_none_armhf::
+       $(MAKE) -f debian/rules.real setup-flavour ARCH='armhf' FEATURESET='none' FLAVOUR='armhf' IMAGE_SUFFIX='' VERSION='4.11' XEN_ARCH='arm32'
+setup_armhf_none_armhf_real:
+setup_armhf_none_real:
+setup_armhf_real::
+       $(MAKE) -f debian/rules.real setup-arch ARCH='armhf' VERSION='4.11' XEN_ARCH='arm32'
+setup_i386: setup_i386_none setup_i386_real
+setup_i386_none: setup_i386_none_amd64 setup_i386_none_real
+setup_i386_none_amd64:: setup_i386_none_amd64_real
+setup_i386_none_amd64::
+       $(MAKE) -f debian/rules.real setup-flavour ARCH='i386' FEATURESET='none' FLAVOUR='amd64' VERSION='4.11' XEN_ARCH='x86_64'
+setup_i386_none_amd64_real:
+setup_i386_none_real:
+setup_i386_real::
+       $(MAKE) -f debian/rules.real setup-arch ARCH='i386' VERSION='4.11' XEN_ARCH='x86_32'
+setup_none: setup_none_real
+setup_none_real:
diff --git a/rules.real b/rules.real
new file mode 100644 (file)
index 0000000..95ecff6
--- /dev/null
@@ -0,0 +1,286 @@
+include /usr/share/dpkg/default.mk
+
+export DH_OPTIONS
+
+setup_env := env -u ARCH -u FLAVOUR -u VERSION -u MAKEFLAGS
+
+MAKE_CLEAN = $(setup_env) $(MAKE) V=1
+MAKE_SELF = $(MAKE) -f debian/rules.real
+
+include debian/rules.defs
+
+stamp = [ -d $(dir $@) ] || mkdir $(dir $@); touch $@
+
+binary-arch-arch: install-libxen_$(ARCH)
+binary-arch-arch: install-libxen-dev_$(ARCH)
+binary-arch-arch: install-libxenstore_$(ARCH)
+binary-arch-arch: install-utils_$(ARCH)
+binary-arch-arch: install-xenstore-utils_$(ARCH)
+binary-arch-flavour: install-hypervisor_$(ARCH)_$(FLAVOUR)
+
+binary-indep: install-utils-common install-hypervisor-common
+
+build-arch-arch: $(STAMPS_DIR)/build-utils_$(ARCH)
+build-arch-flavour: $(STAMPS_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR)
+
+build-indep: $(STAMPS_DIR)/build-docs
+
+setup-arch: $(STAMPS_DIR)/setup-utils_$(ARCH)
+setup-flavour: $(STAMPS_DIR)/setup-hypervisor_$(ARCH)_$(FLAVOUR)
+
+$(STAMPS_DIR)/setup-docs: SOURCE_FILES = $(filter-out debian, $(wildcard *))
+$(STAMPS_DIR)/setup-docs: DIR=$(BUILD_DIR)/build-docs
+$(STAMPS_DIR)/setup-docs:
+       @rm -rf $(DIR)
+       mkdir -p $(DIR)
+       cp -al $(SOURCE_FILES) $(DIR)
+       cp --remove-destination /usr/share/misc/config.guess /usr/share/misc/config.sub $(DIR)
+       cd $(DIR); \
+               WGET=/bin/false \
+               ./configure --disable-stubdom --disable-xen --prefix=/usr
+       @$(stamp)
+
+$(STAMPS_DIR)/setup-hypervisor_$(ARCH)_$(FLAVOUR): SOURCE_FILES = $(filter-out debian, $(wildcard *))
+$(STAMPS_DIR)/setup-hypervisor_$(ARCH)_$(FLAVOUR): DIR=$(BUILD_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR)
+$(STAMPS_DIR)/setup-hypervisor_$(ARCH)_$(FLAVOUR):
+       @rm -rf $(DIR)
+       mkdir -p $(DIR)
+       cp -al $(SOURCE_FILES) $(DIR)
+       echo "XEN_VENDORVERSION := $(EXTRAVERSION)" > $(DIR)/xen/xen-version
+       @$(stamp)
+
+$(STAMPS_DIR)/setup-utils_$(ARCH): SOURCE_FILES = $(filter-out debian, $(wildcard *))
+$(STAMPS_DIR)/setup-utils_$(ARCH): DIR=$(BUILD_DIR)/build-utils_$(ARCH)
+$(STAMPS_DIR)/setup-utils_$(ARCH):
+       @rm -rf $(DIR)
+       mkdir -p $(DIR)
+       cp -al $(SOURCE_FILES) $(DIR)
+       cp --remove-destination /usr/share/misc/config.guess /usr/share/misc/config.sub $(DIR)
+       cd $(DIR); \
+               WGET=/bin/false \
+               ./configure \
+                       --disable-docs --disable-stubdom --disable-xen \
+                       --prefix=/usr \
+                       --includedir=/usr/include \
+                       --libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \
+                       --mandir=/usr/share/man \
+                       --infodir=/usr/share/info \
+                       --sysconfdir=/etc \
+                       --localstatedir=/var \
+                       --with-libexec-leaf-dir=xen-$(VERSION) \
+                       --disable-blktap1 \
+                       --disable-blktap2 \
+                       --disable-ocamltools \
+                       --disable-qemu-traditional --disable-rombios \
+                       --with-system-qemu=/usr/bin/qemu-system-i386 \
+                       --enable-ovmf --with-system-ovmf=/usr/share/ovmf/OVMF.fd \
+                       --with-system-seabios=/usr/share/seabios/bios-256k.bin
+       @$(stamp)
+
+$(STAMPS_DIR)/build-docs: DIR=$(BUILD_DIR)/build-docs
+$(STAMPS_DIR)/build-docs: $(STAMPS_DIR)/setup-docs
+       +$(MAKE_CLEAN) -C $(DIR)/docs
+       touch $@
+
+# Adding LANG=C.UTF-8 to the build environment to work around a bug in grep
+# which causes it to switch into binary mode in the middle of a file.
+# (see http://bugs.launchpad.net/bugs/1547466)
+
+$(STAMPS_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR): DIR=$(BUILD_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR)
+$(STAMPS_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR): $(STAMPS_DIR)/setup-hypervisor_$(ARCH)_$(FLAVOUR)
+       +$(MAKE_CLEAN) -C $(DIR)/xen \
+               XEN_COMPILE_ARCH=$(XEN_ARCH) \
+               XEN_TARGET_ARCH=$(XEN_ARCH) \
+               LANG=C.UTF-8
+       touch $@
+
+$(STAMPS_DIR)/build-utils_$(ARCH) \
+$(STAMPS_DIR)/install-utils_$(ARCH): CONFIG = \
+               debug=n \
+               XEN_COMPILE_ARCH=$(XEN_ARCH) \
+               XEN_TARGET_ARCH=$(XEN_ARCH) \
+               EXTRA_CFLAGS_XEN_TOOLS="$(CFLAGS)" \
+               APPEND_CPPFLAGS="$(CPPFLAGS)" \
+               APPEND_LDFLAGS="$(LDFLAGS)" \
+               OCAMLDESTDIR=$(CURDIR)/$(BUILD_DIR)/install-utils_$(ARCH)/$(OCAML_STDLIB_DIR) \
+               PYTHON=$(shell pyversions -r) \
+               LANG=C.UTF-8
+
+$(STAMPS_DIR)/build-utils_$(ARCH): DIR=$(BUILD_DIR)/build-utils_$(ARCH)
+$(STAMPS_DIR)/build-utils_$(ARCH): $(STAMPS_DIR)/setup-utils_$(ARCH)
+       +$(MAKE_CLEAN) -C $(DIR) $(CONFIG) build-tools-public-headers
+       +$(MAKE_CLEAN) -C $(DIR)/tools $(CONFIG)
+       touch $@
+
+$(STAMPS_DIR)/install-utils_$(ARCH): DIR = $(BUILD_DIR)/build-utils_$(ARCH)
+$(STAMPS_DIR)/install-utils_$(ARCH): INSTALL_DIR = $(BUILD_DIR)/install-utils_$(ARCH)
+$(STAMPS_DIR)/install-utils_$(ARCH): $(STAMPS_DIR)/build-utils_$(ARCH)
+       @rm -rf $(INSTALL_DIR)
+       mkdir -p $(INSTALL_DIR)/$(OCAML_DLL_DIR)
+       +$(MAKE_CLEAN) -C $(DIR) install-tools-public-headers \
+                       DESTDIR=$(CURDIR)/$(INSTALL_DIR) $(CONFIG)
+       +$(MAKE_CLEAN) -C $(DIR)/tools install DESTDIR=$(CURDIR)/$(INSTALL_DIR) $(CONFIG)
+ifneq ($(filter i386 amd64,$(ARCH)),)
+       # hvmloader
+       strip --remove-section=.comment --remove-section=.note $(INSTALL_DIR)/usr/lib/xen*/boot/*
+endif
+       touch $@
+
+$(STAMPS_DIR)/install-utils-common: DIR = $(BUILD_DIR)/build-docs
+$(STAMPS_DIR)/install-utils-common: INSTALL_DIR = $(BUILD_DIR)/install-utils-common
+$(STAMPS_DIR)/install-utils-common: export DESTDIR = $(CURDIR)/$(INSTALL_DIR)
+$(STAMPS_DIR)/install-utils-common: $(STAMPS_DIR)/build-docs
+       @rm -rf $(INSTALL_DIR)
+       +$(MAKE_CLEAN) -C $(SOURCE_DIR)/tools/examples install-configs
+       +$(MAKE_CLEAN) -C $(SOURCE_DIR)/tools/hotplug/common install-scripts
+       +$(MAKE_CLEAN) -C $(SOURCE_DIR)/tools/hotplug/Linux install-scripts
+       +$(MAKE_CLEAN) -C debian/scripts install
+       touch $@
+
+$(STAMPS_DIR)/install-hypervisor-common: INSTALL_DIR = $(BUILD_DIR)/install-hypervisor-common
+$(STAMPS_DIR)/install-hypervisor-common: $(STAMPS_DIR)/build-docs
+       @rm -rf $(INSTALL_DIR)
+       mkdir -p $(INSTALL_DIR)
+
+
+install-base:
+       dh_installchangelogs -XChangelog
+       dh_installdirs
+       dh_installdocs
+       dh_installexamples
+       dh_compress
+       dh_fixperms
+       dh_installdeb
+       dh_gencontrol -- $(GENCONTROL_ARGS)
+       dh_md5sums
+       dh_builddeb
+
+install-dummy:
+       dh_testdir
+       dh_testroot
+       dh_prep
+       +$(MAKE_SELF) install-base
+
+install-hypervisor_$(ARCH)_$(FLAVOUR): DIR=$(BUILD_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR)
+install-hypervisor_$(ARCH)_$(FLAVOUR): PACKAGE_NAME = xen-hypervisor-$(VERSION)-$(FLAVOUR)
+install-hypervisor_$(ARCH)_$(FLAVOUR): DH_OPTIONS = -p$(PACKAGE_NAME)
+install-hypervisor_$(ARCH)_$(FLAVOUR): $(STAMPS_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR)
+       dh_testdir
+       dh_testroot
+       dh_prep
+       dh_installdirs boot
+       dh_install debian/templates/xen-hypervisor.bug/* usr/share/bug/$(PACKAGE_NAME)
+       cp $(DIR)/xen/xen$(IMAGE_SUFFIX) debian/$(PACKAGE_NAME)/boot/xen-$(VERSION)-$(FLAVOUR)$(IMAGE_SUFFIX)
+ifeq ($(ARCH),amd64)
+       cp $(DIR)/xen/xen.efi debian/$(PACKAGE_NAME)/boot/xen-$(VERSION)-$(FLAVOUR).efi
+endif
+       +$(MAKE_SELF) install-base
+
+install-libxen_$(ARCH): DIR = $(BUILD_DIR)/install-utils_$(ARCH)
+install-libxen_$(ARCH): PACKAGE_NAME = libxen-$(VERSION)
+install-libxen_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME)
+install-libxen_$(ARCH): $(STAMPS_DIR)/install-utils_$(ARCH) install-libxenstore_$(ARCH)
+       dh_testdir
+       dh_testroot
+       dh_prep
+       dh_install -Xtoolcore --sourcedir=$(DIR) usr/lib/*/lib*-$(VERSION).so*
+       dh_install debian/templates/libxen.bug/* usr/share/bug/$(PACKAGE_NAME)
+       dh_strip
+       dh_makeshlibs -V
+       dh_shlibdeps
+       +$(MAKE_SELF) install-base
+
+install-libxen-dev_$(ARCH): DIR = $(BUILD_DIR)/install-utils_$(ARCH)
+install-libxen-dev_$(ARCH): PACKAGE_NAME = libxen-dev
+install-libxen-dev_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME)
+install-libxen-dev_$(ARCH): $(STAMPS_DIR)/install-utils_$(ARCH)
+       dh_testdir
+       dh_testroot
+       dh_prep
+       # Move pkgconfig into a multiarch compliant place
+       mv $(DIR)/usr/share/pkgconfig $(DIR)/usr/lib/$(DEB_HOST_MULTIARCH)/
+       dh_install --sourcedir=$(DIR)
+       dh_strip
+       dh_shlibdeps
+       +$(MAKE_SELF) install-base
+
+install-libxenstore_$(ARCH): DIR = $(BUILD_DIR)/install-utils_$(ARCH)
+install-libxenstore_$(ARCH): PACKAGE_NAME = libxenstore3.0
+install-libxenstore_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME)
+install-libxenstore_$(ARCH): $(STAMPS_DIR)/install-utils_$(ARCH)
+       dh_testdir
+       dh_testroot
+       dh_prep
+       dh_install --sourcedir=$(DIR)
+       dh_strip
+       dh_makeshlibs -V
+       dh_shlibdeps
+       +$(MAKE_SELF) install-base
+
+install-utils_$(ARCH): SOURCE_DIR = $(BUILD_DIR)/build-utils_$(ARCH)
+install-utils_$(ARCH): DIR = $(BUILD_DIR)/install-utils_$(ARCH)
+install-utils_$(ARCH): PACKAGE_NAME = xen-utils-$(VERSION)
+install-utils_$(ARCH): PACKAGE_DIR = debian/$(PACKAGE_NAME)
+install-utils_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME)
+install-utils_$(ARCH): $(STAMPS_DIR)/install-utils_$(ARCH) install-libxen_$(ARCH)
+       dh_testdir
+       dh_testroot
+       dh_prep
+       install -D -m644 debian/xen-utils.NEWS $(PACKAGE_DIR)/usr/share/doc/$(PACKAGE_NAME)/NEWS
+       install -D -m644 debian/xen-utils.README.Debian $(PACKAGE_DIR)/usr/share/doc/$(PACKAGE_NAME)/README.Debian
+       cp $(DIR)/usr/sbin/* $(DIR)/usr/lib/xen-$(VERSION)/bin/
+       dh_install --sourcedir=$(DIR) usr/lib/xen-$(VERSION)
+       dh_install debian/templates/xen-utils.bug/* usr/share/bug/$(PACKAGE_NAME)
+       dh_lintian
+       ( echo -n "misc:Built-Using="; dpkg-query -f='$${source:Package} (= $${source:Version}), ' -W ipxe-qemu seabios; echo ) >> debian/$(PACKAGE_NAME).substvars
+       dh_python2 -V$(shell pyversions -rv) /usr/lib/xen-$(VERSION)
+       dh_strip
+       dh_makeshlibs -V
+       dh_shlibdeps
+       +$(MAKE_SELF) install-base
+
+install-utils-common: SOURCE_DIR = $(BUILD_DIR)/build-docs
+install-utils-common: DIR = $(BUILD_DIR)/install-utils-common
+install-utils-common: PACKAGE_NAME = xen-utils-common
+install-utils-common: DH_OPTIONS = -p$(PACKAGE_NAME)
+install-utils-common: $(STAMPS_DIR)/install-utils-common
+       dh_testdir
+       dh_testroot
+       dh_prep
+       dh_install -X .svn --sourcedir=$(DIR)
+       dh_installinit --name xen -- defaults 20 21
+       dh_installinit --name xend
+       dh_installinit --name xendomains --no-start -- defaults 21 20
+       dh_installman \
+               $(SOURCE_DIR)/docs/man1/* \
+               $(SOURCE_DIR)/docs/man5/* \
+               $(SOURCE_DIR)/docs/man8/*
+       dh_installdocs $(SOURCE_DIR)/docs/txt/misc
+       dh_link
+       dh_ucf
+       +$(MAKE_SELF) install-base
+
+install-hypervisor-common: DIR = $(BUILD_DIR)/install-hypervisor-common
+install-hypervisor-common: PACKAGE_NAME = xen-hypervisor-common
+install-hypervisor-common: DH_OPTIONS = -p$(PACKAGE_NAME)
+install-hypervisor-common: $(STAMPS_DIR)/install-hypervisor-common
+       dh_testdir
+       dh_testroot
+       dh_prep
+       dh_install --sourcedir=$(DIR)
+       dh_ucf
+       +$(MAKE_SELF) install-base
+
+install-xenstore-utils_$(ARCH): DIR = $(BUILD_DIR)/install-utils_$(ARCH)
+install-xenstore-utils_$(ARCH): PACKAGE_NAME = xenstore-utils
+install-xenstore-utils_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME)
+install-xenstore-utils_$(ARCH): $(STAMPS_DIR)/install-utils_$(ARCH) install-libxenstore_$(ARCH)
+       dh_testdir
+       dh_testroot
+       dh_prep
+       dh_install --sourcedir=$(DIR)
+       dh_strip
+       dh_shlibdeps
+       +$(MAKE_SELF) install-base
+
+# vim: filetype=make
diff --git a/scripts/Makefile b/scripts/Makefile
new file mode 100644 (file)
index 0000000..22d9a82
--- /dev/null
@@ -0,0 +1,52 @@
+ETC_SCRIPTS = \
+       qemu-ifup
+
+GLOBAL_SCRIPTS = \
+       xen
+
+GLOBAL_TOOLSTACK_LINKS = \
+       xl \
+       xm
+
+GLOBAL_TOOLSTACK_WRAPPER = xen-toolstack-wrapper
+
+GLOBAL_UTILS_LINKS = \
+       xenperf \
+       xenpm \
+       xentop \
+       xentrace \
+       xentrace_format \
+       xentrace_setmask \
+       xentrace_setsize
+
+GLOBAL_UTILS_WRAPPER = xen-utils-wrapper
+
+PRIVATE_SCRIPTS = \
+       xen-dir \
+       xen-init-list \
+       xen-init-name \
+       xen-toolstack \
+       xen-version \
+       $(GLOBAL_TOOLSTACK_WRAPPER) \
+       $(GLOBAL_UTILS_WRAPPER)
+
+ETC_SCRIPTS_DIR = /etc/xen/scripts
+GLOBAL_SCRIPTS_DIR = /usr/sbin
+PRIVATE_SCRIPTS_DIR = /usr/lib/xen-common/bin
+
+install:
+       install -d $(DESTDIR)$(ETC_SCRIPTS_DIR)
+       install $(ETC_SCRIPTS) $(DESTDIR)$(ETC_SCRIPTS_DIR)
+       install -d $(DESTDIR)$(GLOBAL_SCRIPTS_DIR)
+       install $(GLOBAL_SCRIPTS) $(DESTDIR)$(GLOBAL_SCRIPTS_DIR)
+       @for i in $(GLOBAL_TOOLSTACK_LINKS); do \
+           echo ln -s $(PRIVATE_SCRIPTS_DIR)/$(GLOBAL_TOOLSTACK_WRAPPER) $(DESTDIR)$(GLOBAL_SCRIPTS_DIR)/$$i; \
+           ln -s $(PRIVATE_SCRIPTS_DIR)/$(GLOBAL_TOOLSTACK_WRAPPER) $(DESTDIR)$(GLOBAL_SCRIPTS_DIR)/$$i || exit 1; \
+        done
+       @for i in $(GLOBAL_UTILS_LINKS); do \
+           echo ln -s $(PRIVATE_SCRIPTS_DIR)/$(GLOBAL_UTILS_WRAPPER) $(DESTDIR)$(GLOBAL_SCRIPTS_DIR)/$$i; \
+           ln -s $(PRIVATE_SCRIPTS_DIR)/$(GLOBAL_UTILS_WRAPPER) $(DESTDIR)$(GLOBAL_SCRIPTS_DIR)/$$i || exit 1; \
+       done
+       install -d $(DESTDIR)$(PRIVATE_SCRIPTS_DIR)
+       install $(PRIVATE_SCRIPTS) $(DESTDIR)$(PRIVATE_SCRIPTS_DIR)
+
diff --git a/scripts/qemu-ifup b/scripts/qemu-ifup
new file mode 100644 (file)
index 0000000..eb1febe
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+echo -c 'config qemu network with xen bridge for '
+echo $*
+
+# Initialise a dummy MAC address. We choose the numerically
+# largest non-broadcast address to prevent the address getting
+# stolen by an Ethernet bridge for STP purposes.
+# (FE:FF:FF:FF:FF:FF)
+ip link set $1 address fe:ff:ff:ff:ff:ff || true
+
+ip link set up dev $1
+brctl addif $2 $1
diff --git a/scripts/xen b/scripts/xen
new file mode 100755 (executable)
index 0000000..a221e17
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh -e
+
+COMMAND="$(basename $0)"
+TOOLSTACK=$(. /usr/lib/xen-common/bin/xen-toolstack); RET=$?; [ $RET -eq 0 ] || exit $RET
+
+exec "$TOOLSTACK" "$@"
diff --git a/scripts/xen-dir b/scripts/xen-dir
new file mode 100755 (executable)
index 0000000..32b5776
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh -e
+
+VERSION=$(. /usr/lib/xen-common/bin/xen-version); RET=$?; [ $RET -eq 0 ] || exit $RET
+
+if [ -d "/usr/lib/xen-$VERSION" ]; then
+    echo "/usr/lib/xen-$VERSION"
+else
+    echo "ERROR:  Can't find version $VERSION of xen utils, bailing out!" >&2
+    exit 127
+fi
diff --git a/scripts/xen-init-list b/scripts/xen-init-list
new file mode 100755 (executable)
index 0000000..99646ce
--- /dev/null
@@ -0,0 +1,73 @@
+#!/usr/bin/python
+
+import json
+import re
+import sys
+import subprocess
+
+
+class SXPParser(object):
+    tokenizer_rules = r""" (?P<open> \( ) | (?P<close> \) ) | (?P<whitespace> \s+ ) | [^()^\s]+ """
+    tokenizer_re = re.compile(tokenizer_rules, re.X)
+
+    @classmethod
+    def loads(cls, input):
+        data = []
+        stack = []
+        for match in cls.tokenizer_re.finditer(input):
+            if match.group('open'):
+                stack.append([])
+            elif match.group('close'):
+                top = stack.pop()
+                if stack:
+                    stack[-1].append(top)
+                else:
+                    data.append(top)
+            elif match.group('whitespace'):
+                pass
+            else:
+                if stack:
+                    stack[-1].append(match.group())
+        return data
+
+
+class Data(object):
+    def __call__(self, out):
+        for domid, info in sorted(self.data.iteritems(), reverse=True):
+            if domid == 0:
+                continue
+            out.write('{!s} {}\n'.format(domid, *info))
+
+
+class DataJSON(Data):
+    def __init__(self, p):
+        s = json.loads(p)
+        self.data = d = {}
+        for i in s:
+            domid = i['domid']
+            name = i['config']['c_info']['name']
+            d[domid] = (name, )
+
+
+class DataSXP(Data):
+    def __init__(self, p):
+        s = SXPParser.loads(p)
+        self.data = d = {}
+        for i in s:
+            if i and i[0] == 'domain':
+                try:
+                    data = dict(j for j in i if len(j) == 2)
+                    domid = int(data['domid'])
+                    name = data['name']
+                    d[domid] = (name, )
+                except (KeyError, ValueError) as e:
+                    pass
+
+
+if __name__ == '__main__':
+    p = subprocess.check_output(('xen', 'list', '-l'))
+    if p[0] == '(':
+        d = DataSXP(p)
+    else:
+        d = DataJSON(p)
+    d(sys.stdout)
diff --git a/scripts/xen-init-name b/scripts/xen-init-name
new file mode 100755 (executable)
index 0000000..21aad6f
--- /dev/null
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+
+import json
+import re
+import sys
+import subprocess
+
+
+class SXPParser(object):
+    tokenizer_rules = r""" (?P<open> \( ) | (?P<close> \) ) | (?P<whitespace> \s+ ) | [^()^\s]+ """
+    tokenizer_re = re.compile(tokenizer_rules, re.X)
+
+    @classmethod
+    def loads(cls, input):
+        data = []
+        stack = []
+        for match in cls.tokenizer_re.finditer(input):
+            if match.group('open'):
+                stack.append([])
+            elif match.group('close'):
+                top = stack.pop()
+                if stack:
+                    stack[-1].append(top)
+                else:
+                    data.append(top)
+            elif match.group('whitespace'):
+                pass
+            else:
+                if stack:
+                    stack[-1].append(match.group())
+        return data
+
+
+class Data(object):
+    def __call__(self, out):
+        out.write('{}\n'.format(self.name))
+
+
+class DataJSON(Data):
+    def __init__(self, p):
+        s = json.loads(p)
+        self.name = s['c_info']['name']
+
+
+class DataSXP(Data):
+    def __init__(self, p):
+        s = SXPParser.loads(p)
+        for i in s:
+            if i and i[0] == 'domain':
+                data = dict(j for j in i if len(j) == 2)
+                self.name = data['name']
+                break
+
+
+if __name__ == '__main__':
+    p = subprocess.check_output(('xen', 'create', '--quiet', '--dryrun', '--defconfig', sys.argv[1]))
+    if p[0] == '(':
+        d = DataSXP(p)
+    else:
+        d = DataJSON(p)
+    d(sys.stdout)
diff --git a/scripts/xen-toolstack b/scripts/xen-toolstack
new file mode 100755 (executable)
index 0000000..3a36fd0
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/sh -e
+
+configfile=/etc/default/xen
+
+dir=$(. /usr/lib/xen-common/bin/xen-dir); ret=$?; [ $ret -eq 0 ] || exit $ret
+
+check() {
+    local PATH
+    if [ "$1" = xm ] || [ "$1" = xl ]; then
+        PATH="$dir/bin"
+    else
+        PATH="$dir/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+    fi
+    command -v "$1" || :
+}
+
+if [ -e $configfile ]; then
+    . $configfile || true
+fi
+
+if [ "$TOOLSTACK" ]; then
+    cmd=$(check "$TOOLSTACK")
+    if [ "$cmd" ]; then
+        echo "$cmd"
+    else
+        echo "WARING:  Can't find toolstack $TOOLSTACK, fallback to default!" >&2
+        TOOLSTACK=
+    fi
+fi
+
+if [ -z "$TOOLSTACK" ]; then
+    cmd_xm=$(check xm)
+    cmd_xl=$(check xl)
+    if [ "$cmd_xm" ]; then
+        echo "$cmd_xm"
+    elif [ "$cmd_xl" ]; then
+        echo "$cmd_xl"
+    else
+        echo "ERROR:  Toolstack not specifed and nothing detected, bailing out!" >&2
+        exit 127
+    fi
+fi
diff --git a/scripts/xen-toolstack-wrapper b/scripts/xen-toolstack-wrapper
new file mode 100755 (executable)
index 0000000..f76d2ef
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh -e
+
+COMMAND="$(basename $0)"
+TOOLSTACK=$(. /usr/lib/xen-common/bin/xen-toolstack); RET=$?; [ $RET -eq 0 ] || exit $RET
+
+if [ "$(basename "$TOOLSTACK")" != "$COMMAND" ]; then
+    echo "ERROR:  A different toolstack ($(basename "$TOOLSTACK")) have been selected!" >&2
+    exit 1
+fi
+
+exec "$TOOLSTACK" "$@"
diff --git a/scripts/xen-utils-wrapper b/scripts/xen-utils-wrapper
new file mode 100755 (executable)
index 0000000..4d27a62
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh -e
+
+COMMAND="$(basename $0)"
+DIR=$(/usr/lib/xen-common/bin/xen-dir)
+
+exec "$DIR/bin/$COMMAND" "$@"
diff --git a/scripts/xen-version b/scripts/xen-version
new file mode 100755 (executable)
index 0000000..492070a
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/sh -e
+
+error() {
+    echo "ERROR: " "$@" >&2
+    exit 1
+}
+
+if [ -e "/sys/hypervisor/type" ]; then
+    type="$(cat /sys/hypervisor/type)"
+    if [ "$type" = xen ]; then
+        DIR=/sys/hypervisor/version
+        VERSION="$(cat $DIR/major).$(cat $DIR/minor)"
+    elif [ -z "$type" ]; then
+        error "Can't read hypervisor type from sysfs!"
+    else
+        error "Hypervisor is not xen but '$type'!"
+    fi
+else
+    error "Can't find hypervisor information in sysfs!"
+fi
+
+echo "$VERSION"
diff --git a/source/format b/source/format
new file mode 100644 (file)
index 0000000..163aaf8
--- /dev/null
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/templates/control.hypervisor.in b/templates/control.hypervisor.in
new file mode 100644 (file)
index 0000000..b27f748
--- /dev/null
@@ -0,0 +1,15 @@
+Package: xen-hypervisor-@version@@localversion@
+Depends: ${misc:Depends}
+Provides: xen-hypervisor, xen-hypervisor-@version@, xen-hypervisor@localversion@
+Recommends: xen-utils-@version@, xen-hypervisor-common
+Description: Xen Hypervisor on @class@
+ The hypervisor is the "core" for XEN itself. It gets booted by the boot loader
+ and controls cpu and memory, sharing them between your administrative domain
+ (Domain 0) and the virtual guest systems.
+ .
+ @desc@
+ .
+ In order to boot a XEN system along with this package you also need a kernel
+ specifically crafted to work as the Domain 0, mediating hardware access for
+ XEN itself.
+
diff --git a/templates/control.main.in b/templates/control.main.in
new file mode 100644 (file)
index 0000000..bb16fef
--- /dev/null
@@ -0,0 +1,72 @@
+Package: libxen-@version@
+Section: libs
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Multi-Arch: same
+Description: Public libs for Xen
+ This package contains the shared toolstack libraries for Xen.
+
+Package: libxenstore3.0
+Section: libs
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Multi-Arch: same
+Description: Xenstore communications library for Xen
+ This package contains the client library interface to XenStore.
+
+Package: libxen-dev
+Section: libdevel
+Multi-Arch: same
+Depends: libxen-@version@ (= ${binary:Version}), libxenstore3.0 (= ${binary:Version}), ${misc:Depends}
+Description: Public headers and libs for Xen
+ This package contains the public headers and static libraries for Xen.
+ .
+ The libxenlight library is intended as a common base for all Xen toolstack
+ developers. The libxlutil library contains additional helpers which may be
+ useful to toolstack developers.
+ .
+ The libxenstore library allows userspace processes to interact with the
+ XenStore database. XenStore is a shared database used for interdomain
+ communication of configuration and status information. It is accessible to all
+ domains running on the same Xen host. See http://wiki.xen.org/wiki/XenStore
+ for more information.
+ .
+ The libxenctrl, libxenguest and other remaining included libraries are
+ internal libraries intended for use by the Xen toolstack and are not intended
+ to be used directly. Toolstack authors should use libxenlight.
+
+Package: xenstore-utils
+Section: admin
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Conflicts: xen-utils-common (<= 3.1.0-1)
+Replaces: xen-utils-common (<= 3.1.0-1)
+Description: Xenstore command line utilities for Xen
+ This package contains command line utilities for interacting with XenStore.
+ .
+ XenStore is a shared database used for interdomain communication of
+ configuration and status information. It is accessible to all domains running
+ on the same Xen host. See http://wiki.xen.org/wiki/XenStore for more information.
+ .
+ In the common case these tools are used by the Xen toolstack running in
+ domain0 (or a driver domain) however they may also be used in a guest domain
+ to support local scripting which wants to communicate via XenStore.
+
+Package: xen-utils-common
+Architecture: all
+Depends: lsb-base, python, udev, xenstore-utils, ${misc:Depends}
+Description: Xen administrative tools - common files
+ The userspace tools to manage a system virtualized through the Xen virtual
+ machine monitor.
+ .
+ This package is only required on the host system (Domain 0) and not on
+ the virtual guest systems (Domain U).
+
+Package: xen-hypervisor-common
+Architecture: all
+Depends: ${misc:Depends}
+Replaces: xen-hypervisor-4.8-amd64, xen-hypervisor-4.8-arm64, xen-hypervisor-4.8-armhf
+Description: Xen Hypervisor - common files
+ The configuration which arranges for an installed hypervisor to
+ be booted as default, with the right command line arguments passed
+ to both hypervisor and host (Domain 0) kernel.
+ .
+ This package is only required on the host system (Domain 0) and not on
+ the virtual guest systems (Domain U).
diff --git a/templates/control.source.in b/templates/control.source.in
new file mode 100644 (file)
index 0000000..71d92c0
--- /dev/null
@@ -0,0 +1,28 @@
+Section: kernel
+Priority: optional
+Maintainer: Debian Xen Team <pkg-xen-devel@lists.alioth.debian.org>
+Uploaders: Guido Trotter <ultrotter@debian.org>, Bastian Blank <waldi@debian.org>, Ian Jackson <ian.jackson@eu.citrix.com>
+Build-Depends:
+ autotools-dev,
+ debhelper (>> 9),
+ dpkg-dev (>= 1.16.0~),
+ lsb-release,
+ python-dev,
+ bcc [i386 amd64],
+ gcc-multilib [i386 amd64],
+ e2fslibs-dev,
+ iasl,
+ seabios (>= 1.7.4-2~) [i386 amd64],
+ libaio-dev,
+ libfdt-dev [armhf arm64],
+ libglib2.0-dev,
+ liblzma-dev,
+ libncurses5-dev,
+ libpixman-1-dev,
+ libyajl-dev,
+ pkg-config,
+ uuid-dev,
+ zlib1g-dev,
+Standards-Version: 3.9.4
+XS-Python-Version: current
+
diff --git a/templates/control.system.latest.in b/templates/control.system.latest.in
new file mode 100644 (file)
index 0000000..4130c80
--- /dev/null
@@ -0,0 +1,8 @@
+Package: xen-system@localversion@
+Depends: xen-hypervisor-@version@@localversion@, xen-hypervisor-common, xen-utils-@version@, ${misc:Depends}
+Provides: xen-system
+Description: Xen System on @class@ (meta-package)
+ This package depends on the latest Xen hypervisor for use on @class@ and the Xen utils.
+ .
+ @desc@
+
diff --git a/templates/control.utils.in b/templates/control.utils.in
new file mode 100644 (file)
index 0000000..6dcb41a
--- /dev/null
@@ -0,0 +1,12 @@
+Package: xen-utils-@version@
+Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}, xen-utils-common (>= ${source:Version})
+Recommends: bridge-utils, libc6-xen [i386], xen-hypervisor-@version@, qemu-system-x86, grub-xen-host [i386 amd64]
+Suggests: qemu-utils [i386 amd64], seabios [i386 amd64], ovmf
+Provides: xen-utils
+Built-Using: ${misc:Built-Using}
+Description: XEN administrative tools
+ The userspace tools to manage a system virtualized through the XEN virtual
+ machine monitor.
+ .
+ qemu-utils and seabios are neded for "Xen HVM" (amd64 and i386)
+
diff --git a/templates/libxen.bug/control b/templates/libxen.bug/control
new file mode 100644 (file)
index 0000000..3e21b39
--- /dev/null
@@ -0,0 +1 @@
+Submit-As: src:xen
diff --git a/templates/xen-hypervisor.bug/control b/templates/xen-hypervisor.bug/control
new file mode 100644 (file)
index 0000000..3e21b39
--- /dev/null
@@ -0,0 +1 @@
+Submit-As: src:xen
diff --git a/templates/xen-hypervisor.postinst.in b/templates/xen-hypervisor.postinst.in
new file mode 100644 (file)
index 0000000..1540842
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+    configure)
+        if command -v update-grub > /dev/null && [ -d /boot/grub ]; then
+            update-grub || :
+        fi
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+    ;;
+
+    *)
+       echo "postinst called with unknown argument \`$1'" >&2
+       exit 1
+    ;;
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/templates/xen-hypervisor.postrm.in b/templates/xen-hypervisor.postrm.in
new file mode 100644 (file)
index 0000000..4833411
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+    remove)
+        if command -v update-grub > /dev/null && [ -d /boot/grub ]; then
+            update-grub || :
+        fi
+    ;;
+
+    purge|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+    ;;
+
+    *)
+        echo "postrm called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/templates/xen-utils.bug/control b/templates/xen-utils.bug/control
new file mode 100644 (file)
index 0000000..3e21b39
--- /dev/null
@@ -0,0 +1 @@
+Submit-As: src:xen
diff --git a/templates/xen-utils.lintian-overrides.in b/templates/xen-utils.lintian-overrides.in
new file mode 100644 (file)
index 0000000..dabce13
--- /dev/null
@@ -0,0 +1 @@
+statically-linked-binary usr/lib/xen-@version@/boot/hvmloader
diff --git a/templates/xen-utils.postinst.in b/templates/xen-utils.postinst.in
new file mode 100644 (file)
index 0000000..581327f
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+set -e
+
+case "$1" in
+    configure)
+        update-alternatives --remove xen-default /usr/lib/xen-@version@
+        if [ -x "/etc/init.d/xen" ]; then
+           invoke-rc.d xen start || exit $?
+        fi
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+    ;;
+
+    *)
+       echo "postinst called with unknown argument \`$1'" >&2
+       exit 1
+    ;;
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/templates/xen-utils.prerm.in b/templates/xen-utils.prerm.in
new file mode 100644 (file)
index 0000000..1aa2cae
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+    remove|upgrade)
+        update-alternatives --remove xen-default /usr/lib/xen-@version@
+        if [ -x "/etc/init.d/xen" ]; then
+            invoke-rc.d xen stop || exit $?
+        fi
+    ;;
+
+    deconfigure|failed-upgrade)
+    ;;
+
+    *)
+        echo "prerm called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/tree/xen-hypervisor-common/etc/default/grub.d/xen.cfg b/tree/xen-hypervisor-common/etc/default/grub.d/xen.cfg
new file mode 100644 (file)
index 0000000..b2d2f6e
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# Uncomment the following variable and set to 0 or 1 to avoid warning.
+#
+#XEN_OVERRIDE_GRUB_DEFAULT=0
+
+echo "Including Xen overrides from /etc/default/grub.d/xen.cfg"
+
+#
+# When running update-grub with the Xen hypervisor installed, there are
+# some additional variables that can be used to pass options to the
+# hypervisor or the dom0 kernel.
+
+# The following two are used to generate arguments for the hypervisor:
+#
+#GRUB_CMDLINE_XEN_DEFAULT=""
+#GRUB_CMDLINE_XEN=""
+#
+# For example:
+#
+# dom0_mem=<size>[M]:max=<size>[M]
+#   Sets the amount of memory dom0 uses (max prevents balloning for more)
+# com[12]=<speed>,<data bits><parity><stopbits>
+#   Initialize a serial console from in the hypervisor (eg. 115200,8n1)
+#   Note that com1 would be ttyS0 in Linux.
+# console=<dev>[,<dev> ...]
+#   Redirects Xen hypervisor console (eg. com1,vga)
+
+#
+# The next two lines are used for creating kernel arguments for the dom0
+# kernel. This allows to have different options for the same kernel used
+# natively or as dom0 kernel.
+#
+#GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT"
+#GRUB_CMDLINE_LINUX_XEN_REPLACE="$GRUB_CMDLINE_LINUX"
+#
+# For example:
+#
+# earlyprintk=xenboot
+#   Allows to send early printk messages to the Xen hypervisor console
+# console=hvc0
+#   Redirects the Linux console to the hypervisor console
+
+#
+# Make booting into Xen the default if not changed above. Finding the
+# current string for it always has been a problem.
+#
+if [ "$XEN_OVERRIDE_GRUB_DEFAULT" = "" ]; then
+       echo "WARNING: GRUB_DEFAULT changed to boot into Xen by default!"
+       echo "         Edit /etc/default/grub.d/xen.cfg to avoid this warning."
+       XEN_OVERRIDE_GRUB_DEFAULT=1
+fi
+if [ "$XEN_OVERRIDE_GRUB_DEFAULT" = "1" ]; then
+       GRUB_DEFAULT="Debian GNU/Linux, with Xen hypervisor"
+fi
diff --git a/tree/xen-utils-common/etc/xen/xend-config.sxp b/tree/xen-utils-common/etc/xen/xend-config.sxp
new file mode 100644 (file)
index 0000000..93a24fd
--- /dev/null
@@ -0,0 +1,306 @@
+# -*- sh -*-
+
+#
+# Xend configuration file.
+#
+
+# This example configuration is appropriate for an installation that 
+# utilizes a bridged network configuration. Access to xend via http
+# is disabled.  
+
+# Commented out entries show the default for that entry, unless otherwise
+# specified.
+
+#(logfile /var/log/xen/xend.log)
+#(loglevel DEBUG)
+
+# Uncomment the line below.  Set the value to flask, acm, or dummy to 
+# select a security module.
+
+#(xsm_module_name dummy)
+
+# The Xen-API server configuration.
+#
+# This value configures the ports, interfaces, and access controls for the
+# Xen-API server.  Each entry in the list starts with either unix, a port
+# number, or an address:port pair.  If this is "unix", then a UDP socket is
+# opened, and this entry applies to that.  If it is a port, then Xend will
+# listen on all interfaces on that TCP port, and if it is an address:port
+# pair, then Xend will listen on the specified port, using the interface with
+# the specified address.
+#
+# The subsequent string configures the user-based access control for the
+# listener in question.  This can be one of "none" or "pam", indicating either
+# that users should be allowed access unconditionally, or that the local
+# Pluggable Authentication Modules configuration should be used.  If this
+# string is missing or empty, then "pam" is used.
+#
+# The final string gives the host-based access control for that listener. If
+# this is missing or empty, then all connections are accepted.  Otherwise,
+# this should be a space-separated sequence of regular expressions; any host
+# with a fully-qualified domain name or an IP address that matches one of
+# these regular expressions will be accepted.
+#
+# Example: listen on TCP port 9363 on all interfaces, accepting connections
+# only from machines in example.com or localhost, and allow access through
+# the unix domain socket unconditionally:
+#
+#   (xen-api-server ((9363 pam '^localhost$ example\\.com$')
+#                    (unix none)))
+#
+# Optionally, the TCP Xen-API server can use SSL by specifying the private
+# key and certificate location:
+#
+#                    (9367 pam '' xen-api.key xen-api.crt)
+#
+# Default:
+#   (xen-api-server ((unix)))
+
+
+#(xend-http-server no)
+#(xend-unix-server no)
+#(xend-tcp-xmlrpc-server no)
+#(xend-unix-xmlrpc-server yes)
+#(xend-relocation-server no)
+#(xend-relocation-ssl-server no)
+#(xend-udev-event-server no)
+
+#(xend-unix-path /var/lib/xend/xend-socket)
+
+
+# Address and port xend should use for the legacy TCP XMLRPC interface, 
+# if xend-tcp-xmlrpc-server is set.
+#(xend-tcp-xmlrpc-server-address 'localhost')
+#(xend-tcp-xmlrpc-server-port 8006)
+
+# SSL key and certificate to use for the legacy TCP XMLRPC interface.
+# Setting these will mean that this port serves only SSL connections as
+# opposed to plaintext ones.
+#(xend-tcp-xmlrpc-server-ssl-key-file  xmlrpc.key)
+#(xend-tcp-xmlrpc-server-ssl-cert-file xmlrpc.crt)
+
+
+# Port xend should use for the HTTP interface, if xend-http-server is set.
+#(xend-port            8000)
+
+# Port xend should use for the relocation interface, if xend-relocation-server
+# is set.
+#(xend-relocation-port 8002)
+
+# Port xend should use for the ssl relocation interface, if
+# xend-relocation-ssl-server is set.
+#(xend-relocation-ssl-port 8003)
+
+# SSL key and certificate to use for the ssl relocation interface, if
+# xend-relocation-ssl-server is set.
+#(xend-relocation-server-ssl-key-file   xmlrpc.key)
+#(xend-relocation-server-ssl-cert-file  xmlrpc.crt)
+
+# Whether to use ssl as default when relocating.
+#(xend-relocation-ssl no)
+
+# Address xend should listen on for HTTP connections, if xend-http-server is
+# set.
+# Specifying 'localhost' prevents remote connections.
+# Specifying the empty string '' (the default) allows all connections.
+#(xend-address '')
+#(xend-address localhost)
+
+# Address xend should listen on for relocation-socket connections, if
+# xend-relocation-server is set.
+# Meaning and default as for xend-address above.
+# Also, interface name is allowed (e.g. eth0) there to get the
+# relocation address to be bound on.
+#(xend-relocation-address '')
+
+# The hosts allowed to talk to the relocation port.  If this is empty (the
+# default), then all connections are allowed (assuming that the connection
+# arrives on a port and interface on which we are listening; see
+# xend-relocation-port and xend-relocation-address above).  Otherwise, this
+# should be a space-separated sequence of regular expressions.  Any host with
+# a fully-qualified domain name or an IP address that matches one of these
+# regular expressions will be accepted.
+#
+# For example:
+#  (xend-relocation-hosts-allow '^localhost$ ^.*\\.example\\.org$')
+#
+#(xend-relocation-hosts-allow '')
+
+# The limit (in kilobytes) on the size of the console buffer
+#(console-limit 1024)
+
+##
+# NOTE:
+# Please read /usr/share/doc/xen-utils-common/README.Debian for Debian specific
+# informations about the network setup.
+
+##
+# To bridge network traffic, like this:
+#
+# dom0: ----------------- bridge -> real eth0 -> the network
+#                            |
+# domU: fake eth0 -> vifN.0 -+
+#
+# use
+#
+# (network-script network-bridge)
+#
+# Your default ethernet device is used as the outgoing interface, by default. 
+# To use a different one (e.g. eth1) use
+#
+# (network-script 'network-bridge netdev=eth1')
+#
+# The bridge is named eth0, by default (yes, really!)
+#
+
+# It is normally much better to create the bridge yourself in
+# /etc/network/interfaces.  network-bridge start does nothing if you
+# already have a bridge, and network-bridge stop does nothing if the
+# default bridge name (normally eth0) is not a bridge.  See
+# bridge-utils-interfaces(5) for full information on the syntax in
+# /etc/network/interfaces, but you probably want something like this:
+#    iface xenbr0 inet static
+#        address [etc]
+#        netmask [etc]
+#        [etc]
+#        bridge_ports eth0
+#
+# To have network-bridge create a differently-named bridge, use:
+# (network-script 'network-bridge bridge=<name>')
+#
+# It is possible to use the network-bridge script in more complicated
+# scenarios, such as having two outgoing interfaces, with two bridges, and
+# two fake interfaces per guest domain.  To do things like this, write
+# yourself a wrapper script, and call network-bridge from it, as appropriate.
+#
+
+# The script used to control virtual interfaces.  This can be overridden on a
+# per-vif basis when creating a domain or a configuring a new vif.  The
+# vif-bridge script is designed for use with the network-bridge script, or
+# similar configurations.
+#
+# If you have overridden the bridge name using
+# (network-script 'network-bridge bridge=<name>') then you may wish to do the
+# same here.  The bridge name can also be set when creating a domain or
+# configuring a new vif, but a value specified here would act as a default.
+#
+# If you are using only one bridge, the vif-bridge script will discover that,
+# so there is no need to specify it explicitly.  The default is to use
+# the bridge which is listed first in the output from brctl.
+#
+(vif-script vif-bridge)
+
+
+## Use the following if network traffic is routed, as an alternative to the
+# settings for bridged networking given above.
+#(network-script network-route)
+#(vif-script     vif-route)
+
+
+## Use the following if network traffic is routed with NAT, as an alternative
+# to the settings for bridged networking given above.
+#(network-script network-nat)
+#(vif-script     vif-nat)
+
+# dom0-min-mem is the lowest permissible memory level (in MB) for dom0.
+# This is a minimum both for auto-ballooning (as enabled by
+# enable-dom0-ballooning below) and for xm mem-set when applied to dom0.
+(dom0-min-mem 196)
+
+# Whether to enable auto-ballooning of dom0 to allow domUs to be created.
+# If enable-dom0-ballooning = no, dom0 will never balloon out.
+(enable-dom0-ballooning yes)
+
+# 32-bit paravirtual domains can only consume physical
+# memory below 168GB. On systems with memory beyond that address,
+# they'll be confined to memory below 128GB.
+# Using total_available_memory (in GB) to specify the amount of memory reserved
+# in the memory pool exclusively for 32-bit paravirtual domains.
+# Additionally you should use dom0_mem = <-Value> as a parameter in 
+# xen kernel to reserve the memory for 32-bit paravirtual domains, default 
+# is "0" (0GB).  
+(total_available_memory 0) 
+
+# In SMP system, dom0 will use dom0-cpus # of CPUS
+# If dom0-cpus = 0, dom0 will take all cpus available
+(dom0-cpus 0)
+
+# Whether to enable core-dumps when domains crash.
+#(enable-dump no)
+
+# The tool used for initiating virtual TPM migration
+#(external-migration-tool '')
+
+# The interface for VNC servers to listen on. Defaults
+# to 127.0.0.1  To restore old 'listen everywhere' behaviour
+# set this to 0.0.0.0
+#(vnc-listen '127.0.0.1')
+
+# The default password for VNC console on HVM domain.
+# Empty string is no authentication.
+(vncpasswd '')
+
+# The VNC server can be told to negotiate a TLS session
+# to encryption all traffic, and provide x509 cert to
+# clients enabling them to verify server identity. The
+# GTK-VNC widget, virt-viewer, virt-manager and VeNCrypt
+# all support the VNC extension for TLS used in QEMU. The
+# TightVNC/RealVNC/UltraVNC clients do not.
+#
+# To enable this create x509 certificates / keys in the
+# directory ${XEN_CONFIG_DIR} + vnc
+#
+#  ca-cert.pem       - The CA certificate
+#  server-cert.pem   - The Server certificate signed by the CA
+#  server-key.pem    - The server private key
+#
+# and then uncomment this next line
+# (vnc-tls 1)
+
+# The certificate dir can be pointed elsewhere..
+#
+# (vnc-x509-cert-dir vnc)
+
+# The server can be told to request & validate an x509
+# certificate from the client. Only clients with a cert
+# signed by the trusted CA will be able to connect. This
+# is more secure the password auth alone. Passwd auth can
+# used at the same time if desired. To enable client cert
+# checking uncomment this:
+#
+# (vnc-x509-verify 1)
+
+# The default keymap to use for the VM's virtual keyboard
+# when not specififed in VM's configuration
+#(keymap 'en-us')
+
+# Script to run when the label of a resource has changed.
+#(resource-label-change-script '')
+
+# Rotation count of qemu-dm log file.
+#(qemu-dm-logrotate-count 10)
+
+# Path where persistent domain configuration is stored.
+# Default is /var/lib/xend/domains/
+#(xend-domains-path /var/lib/xend/domains)
+
+# Number of seconds xend will wait for device creation and
+# destruction
+#(device-create-timeout 100)
+#(device-destroy-timeout 100)
+
+# When assigning device to HVM guest, we use the strict check for HVM guest by
+# default. (For PV guest, we use loose check automatically if necessary.)
+# When we assign device to HVM guest, if we meet with the co-assignment
+# issues or the ACS issue, we could try changing the option to 'no' -- however,
+# we have to realize this may incur security issue and we can't make sure the
+# device assignment could really work properly even after we do this.
+#(pci-passthrough-strict-check yes)
+
+# If we have a very big scsi device configuration, start of xend is slow,
+# because xend scans all the device paths to build its internal PSCSI device
+# list.  If we need only a few devices for assigning to a guest, we can reduce
+# the scan to this device. Set list list of device paths in same syntax like in
+# command lsscsi, e.g. ('16:0:0:0' '15:0') 
+# (pscsi-device-mask ('*'))
+
diff --git a/tree/xen-utils-common/etc/xen/xend-pci-permissive.sxp b/tree/xen-utils-common/etc/xen/xend-pci-permissive.sxp
new file mode 100644 (file)
index 0000000..1a3fb90
--- /dev/null
@@ -0,0 +1,27 @@
+###############################################################################
+# Configuration file for granting quiry PCI devices full write access to their 
+# configuration space.  This file should only be used when you are unable to 
+# determine the exact registers required by your device.  Even so, it should 
+# be used only temporarily.
+# 
+# SEND A MESSAGE TO xen-devel@lists.xensource.com IF YOU USE THIS FILE.
+# 
+# Using this file should NOT be necessary.  If you must use it to make some
+# device work, send a message to the above list with as much information about 
+# your device as possible so the developers can make accomodations for it.  
+# Once developers make the necessary updates you can remove the corresponding
+# entry for your device. 
+###############################################################################
+# Entries are formated as follows:  <vendor>:<device>[:<subvendor>:<subdevice>]
+# 
+# Example: Appending to an existing list
+#  
+# (unconstrained_dev_ids
+#     ('XXXX:XXXX:XXXX:XXXX'   # existing entry
+#      'YYYY:YYYY:YYYY:YYYY'   # new entry 1
+#      'ZZZZ:ZZZZ')            # new entry 2
+# )
+###############################################################################
+(unconstrained_dev_ids
+     #('0123:4567:89AB:CDEF')
+)
diff --git a/tree/xen-utils-common/etc/xen/xend-pci-quirks.sxp b/tree/xen-utils-common/etc/xen/xend-pci-quirks.sxp
new file mode 100644 (file)
index 0000000..6bce4b8
--- /dev/null
@@ -0,0 +1,96 @@
+###############################################################################
+# Configuration file for quirky PCI devices that require write-access to 
+# parts of the configuration space.  Use this file to specific PCI device
+# IDs and the configuration space fields to which those devices must be
+# able to write.
+#
+# Length is important, so be sure to match new entries with the 
+# lengths of comparable existing entries. 
+#
+# Additions to this file take effect as soon as a new domain with a 
+# matching device is started.  However, to remove a field that was 
+# previously applied to a device you must unbind the device from 
+# pciback.
+###############################################################################
+# This is a bogus entry to show how a new device would be added to the list
+#
+# (new_quirky_dev_name
+#    (pci_ids 
+#       ('0123:4567:890A:BCEF') 
+#    )
+#
+#    (pci_config_space_fields 
+#       ('12345678:1:00000000')
+#    )
+# )
+###############################################################################
+
+(tg3
+    (pci_ids
+       # Entries are formated as follows:  
+       #     <vendor>:<device>[:<subvendor>:<subdevice>]
+        ('14e4:1644'   # Broadcom Tigon3 5700
+        '14e4:1645'   # Broadcom Tigon3 5701
+         '14e4:1646'   # Broadcom Tigon3 5702
+         '14e4:1647'   # Broadcom Tigon3 5703
+         '14e4:1648'   # Broadcom Tigon3 5704
+         '14e4:164d'   # Broadcom Tigon3 5702FE
+         '14e4:1653'   # Broadcom Tigon3 5705
+         '14e4:1654'   # Broadcom Tigon3 5705_2
+         '14e4:165d'   # Broadcom Tigon3 5705M
+         '14e4:165e'   # Broadcom Tigon3 5705M_2
+         '14e4:16a6'   # Broadcom Tigon3 5702X
+         '14e4:16a7'   # Broadcom Tigon3 5703X
+         '14e4:16a8'   # Broadcom Tigon3 5704S
+         '14e4:16c6'   # Broadcom Tigon3 5702A3
+         '14e4:16c7'   # Broadcom Tigon3 5703A3
+         '14e4:1696'   # Broadcom Tigon3 5782
+         '14e4:169c'   # Broadcom Tigon3 5788
+         '14e4:169d'   # Broadcom Tigon3 5789
+         '14e4:170d'   # Broadcom Tigon3 5901
+         '14e4:1649'   # Broadcom Tigon3 5704S_2
+         '14e4:166e'   # Broadcom Tigon3 5705F
+         '14e4:1658'   # Broadcom Tigon3 5720
+         '14e4:1659'   # Broadcom Tigon3 5721
+         '14e4:1676'   # Broadcom Tigon3 5750
+         '14e4:1677'   # Broadcom Tigon3 5751
+         '14e4:167c'   # Broadcom Tigon3 5750M
+         '14e4:167d'   # Broadcom Tigon3 5751M
+         '14e4:167e'   # Broadcom Tigon3 5751F
+         '14e4:1600'   # Broadcom Tigon3 5752
+         '14e4:1601'   # Broadcom Tigon3 5752M
+         '14e4:16f7'   # Broadcom Tigon3 5753
+         '14e4:16fd'   # Broadcom Tigon3 5753M
+         '14e4:16fe'   # Broadcom Tigon3 5753F
+         '14e4:1668'   # Broadcom Tigon3 5714
+         '14e4:1678'   # Broadcom Tigon3 5715
+         '14e4:166a'   # Broadcom Tigon3 5780
+         '14e4:166b'   # Broadcom Tigon3 5780S
+         '14e4:16dd'   # Broadcom Tigon3 5781
+         '1148:4400'   # Syskonnect 9DXX
+         '1148:4500'   # Syskonnect 9MXX
+         '173b:03e8'   # Altima AC1000
+         '173b:03e9'   # Altima AC1001
+         '173b:03eb'   # Altima AC1003
+         '173b:03ea'   # Altima AC9100
+         '106b:1645')  # Apple Tigon3
+    )
+
+    (pci_config_space_fields
+       # Entries are formated as follows:  
+       #     <register>:<size>:<mask>
+       # size is measured in bytes (1,2,4 are valid sizes)
+       # mask is currently unused; use all zero's
+        ('00000078:4:00000000'   # TG3PCI_REG_BASE_ADDR
+         '0000007c:4:00000000'   # TG3PCI_MEM_WIN_BASE_ADDR
+         '00000080:4:00000000'   # TG3PCI_REG_DATA
+         '00000084:4:00000000'   # TG3PCI_MEM_WIN_DATA
+         '00000090:4:00000000'   # TG3PCI_MISC_LOCAL_CTRL
+         '00000068:4:00000000'   # TG3PCI_MISC_HOST_CTRL
+         '0000009C:4:00000000'   # TG3PCI_STD_RING_PROD_IDX + TG3_64BIT_REG_LOW
+         '00000098:4:00000000'   # TG3PCI_STD_RING_PROD_IDX + TG3_64BIT_REG_HIGH
+         '000000a4:4:00000000'   # TG3PCI_RCV_RET_RING_CON_IDX + TG3_64BIT_REG_LOW
+         '000000a0:4:00000000'   # TG3PCI_RCV_RET_RING_CON_IDX + TG3_64BIT_REG_HIGH
+         '00000070:4:00000000')  # TG3PCI_PCISTATE
+    )
+)
diff --git a/tree/xen-utils-common/usr/share/xen-utils-common/default.xen b/tree/xen-utils-common/usr/share/xen-utils-common/default.xen
new file mode 100644 (file)
index 0000000..87a35f3
--- /dev/null
@@ -0,0 +1,9 @@
+# Configuration for Xen system
+# ----------------------------
+
+# There exists several tool stacks to configure a Xen system.
+# xl: This is the new toolstack using libxenlight/libxl (default)
+# xm: Was the old toolstack (xend) which is no longer supported!
+#
+# Attention: You need to reboot after changing this!
+TOOLSTACK=
diff --git a/xen-hypervisor-4.11-amd64.postinst b/xen-hypervisor-4.11-amd64.postinst
new file mode 100644 (file)
index 0000000..1540842
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+    configure)
+        if command -v update-grub > /dev/null && [ -d /boot/grub ]; then
+            update-grub || :
+        fi
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+    ;;
+
+    *)
+       echo "postinst called with unknown argument \`$1'" >&2
+       exit 1
+    ;;
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/xen-hypervisor-4.11-amd64.postrm b/xen-hypervisor-4.11-amd64.postrm
new file mode 100644 (file)
index 0000000..4833411
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+    remove)
+        if command -v update-grub > /dev/null && [ -d /boot/grub ]; then
+            update-grub || :
+        fi
+    ;;
+
+    purge|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+    ;;
+
+    *)
+        echo "postrm called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/xen-hypervisor-4.11-arm64.postinst b/xen-hypervisor-4.11-arm64.postinst
new file mode 100644 (file)
index 0000000..1540842
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+    configure)
+        if command -v update-grub > /dev/null && [ -d /boot/grub ]; then
+            update-grub || :
+        fi
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+    ;;
+
+    *)
+       echo "postinst called with unknown argument \`$1'" >&2
+       exit 1
+    ;;
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/xen-hypervisor-4.11-arm64.postrm b/xen-hypervisor-4.11-arm64.postrm
new file mode 100644 (file)
index 0000000..4833411
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+    remove)
+        if command -v update-grub > /dev/null && [ -d /boot/grub ]; then
+            update-grub || :
+        fi
+    ;;
+
+    purge|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+    ;;
+
+    *)
+        echo "postrm called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/xen-hypervisor-4.11-armhf.postinst b/xen-hypervisor-4.11-armhf.postinst
new file mode 100644 (file)
index 0000000..1540842
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+    configure)
+        if command -v update-grub > /dev/null && [ -d /boot/grub ]; then
+            update-grub || :
+        fi
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+    ;;
+
+    *)
+       echo "postinst called with unknown argument \`$1'" >&2
+       exit 1
+    ;;
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/xen-hypervisor-4.11-armhf.postrm b/xen-hypervisor-4.11-armhf.postrm
new file mode 100644 (file)
index 0000000..4833411
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+    remove)
+        if command -v update-grub > /dev/null && [ -d /boot/grub ]; then
+            update-grub || :
+        fi
+    ;;
+
+    purge|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+    ;;
+
+    *)
+        echo "postrm called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/xen-hypervisor-common.install b/xen-hypervisor-common.install
new file mode 100644 (file)
index 0000000..f8cfab9
--- /dev/null
@@ -0,0 +1 @@
+../../tree/xen-hypervisor-common/* /
diff --git a/xen-utils-4.11.lintian-overrides b/xen-utils-4.11.lintian-overrides
new file mode 100644 (file)
index 0000000..452adc0
--- /dev/null
@@ -0,0 +1 @@
+statically-linked-binary usr/lib/xen-4.11/boot/hvmloader
diff --git a/xen-utils-4.11.postinst b/xen-utils-4.11.postinst
new file mode 100644 (file)
index 0000000..9bf84f9
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+set -e
+
+case "$1" in
+    configure)
+        update-alternatives --remove xen-default /usr/lib/xen-4.11
+        if [ -x "/etc/init.d/xen" ]; then
+           invoke-rc.d xen start || exit $?
+        fi
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+    ;;
+
+    *)
+       echo "postinst called with unknown argument \`$1'" >&2
+       exit 1
+    ;;
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/xen-utils-4.11.prerm b/xen-utils-4.11.prerm
new file mode 100644 (file)
index 0000000..123a59b
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+    remove|upgrade)
+        update-alternatives --remove xen-default /usr/lib/xen-4.11
+        if [ -x "/etc/init.d/xen" ]; then
+            invoke-rc.d xen stop || exit $?
+        fi
+    ;;
+
+    deconfigure|failed-upgrade)
+    ;;
+
+    *)
+        echo "prerm called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/xen-utils-common.README.Debian b/xen-utils-common.README.Debian
new file mode 100644 (file)
index 0000000..873a9d3
--- /dev/null
@@ -0,0 +1,29 @@
+Xen for Debian
+==============
+
+Config behaviour
+----------------
+
+The Debian packages changes the behaviour of some config options.
+
+The options "kernel", "initrd" and "loader" searches in the Xen private boot
+directory (/usr/lib/xen-$version/boot) first. "bootloader" and "device_model"
+also searches the Xen private bin directory (/usr/lib/xen-$version/bin). This
+means that the following entries will properly find anything:
+  loader = 'hvmloader'
+  bootloader = 'pygrub'
+
+Network setup
+-------------
+
+The Debian package of Xen don't change the network setup in any way.  This
+differs from the upstream version, which overwrites the main network card
+(eth0) with a bridge setup and may break the network at this point..
+
+To setup a bridge please follow the instructions in the manpage for
+bridge-utils-interfaces(5).
+
+You can also change the /etc/xen/xend-config.sxp file and re-enable the Xen
+included network setup by adding
+  (network-script network-bridge)
+to the file. But please note that this may or may not work.
diff --git a/xen-utils-common.dirs b/xen-utils-common.dirs
new file mode 100644 (file)
index 0000000..c745c08
--- /dev/null
@@ -0,0 +1 @@
+var/lib/xen
diff --git a/xen-utils-common.examples b/xen-utils-common.examples
new file mode 100644 (file)
index 0000000..50cee55
--- /dev/null
@@ -0,0 +1,2 @@
+debian/tmp/etc/xen/cpupool*
+debian/tmp/etc/xen/xm*
diff --git a/xen-utils-common.install b/xen-utils-common.install
new file mode 100644 (file)
index 0000000..d919bad
--- /dev/null
@@ -0,0 +1,5 @@
+etc/xen/scripts
+etc/xen/xl*
+usr/lib/xen-common
+usr/sbin
+../../tree/xen-utils-common/* /
diff --git a/xen-utils-common.postinst b/xen-utils-common.postinst
new file mode 100644 (file)
index 0000000..f719731
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+set -e
+
+case "$1" in
+configure)
+       install -d -m 2750 -g adm /var/log/xen
+       ;;
+
+abort-upgrade|abort-remove|abort-deconfigure)
+       ;;
+
+*)
+       echo "postinst called with unknown argument \`$1'" >&2
+       exit 1
+       ;;
+esac
+
+dpkg-maintscript-helper mv_conffile /etc/init.d/xend /etc/init.d/xen 4.1.2-4~ -- "$@"
+
+#DEBHELPER#
+
+exit 0
diff --git a/xen-utils-common.postrm b/xen-utils-common.postrm
new file mode 100644 (file)
index 0000000..48b57ea
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+set -e
+
+case "$1" in
+purge)
+       rmdir --ignore-fail-on-non-empty /var/log/xen
+       ;;
+
+remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+       ;;
+
+*)
+       echo "postrm called with unknown argument \`$1'" >&2
+       exit 
+       ;;
+esac
+
+dpkg-maintscript-helper mv_conffile /etc/init.d/xend /etc/init.d/xen 4.1.2-4~ -- "$@"
+
+#DEBHELPER#
+
+exit 0
diff --git a/xen-utils-common.preinst b/xen-utils-common.preinst
new file mode 100644 (file)
index 0000000..5f9c729
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+set -e
+
+case "$1" in
+install|upgrade)
+       ;;
+
+abort-upgrade)
+       ;;
+
+*)
+        echo "preinst called with unknown argument \`$1'" >&2
+        exit 1
+       ;;
+esac
+
+dpkg-maintscript-helper mv_conffile /etc/init.d/xend /etc/init.d/xen 4.1.2-4~ -- "$@"
+update-rc.d -f xend remove >/dev/null
+
+#DEBHELPER#
+
+exit 0
diff --git a/xen-utils-common.ucf b/xen-utils-common.ucf
new file mode 100644 (file)
index 0000000..b32b91d
--- /dev/null
@@ -0,0 +1 @@
+/usr/share/xen-utils-common/default.xen /etc/default/xen
diff --git a/xen-utils-common.xen.init b/xen-utils-common.xen.init
new file mode 100644 (file)
index 0000000..3411c15
--- /dev/null
@@ -0,0 +1,378 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides:          xen xend
+# Required-Start:    $syslog $remote_fs
+# Required-Stop:     $syslog $remote_fs
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Xen daemons
+# Description:       Xen daemons
+### END INIT INFO
+
+. /lib/init/vars.sh
+. /lib/lsb/init-functions
+
+# Default variables
+XENSTORED_DIR="/var/run/xenstored"
+
+[ -r /etc/default/xen ] && . /etc/default/xen
+[ -r /etc/default/xend ] && . /etc/default/xend
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DESC="Xen daemons"
+
+ROOT=$(/usr/lib/xen-common/bin/xen-dir 2>/dev/null)
+if [ $? -ne 0 ]; then
+       log_warning_msg "Not running within Xen or no compatible utils"
+       exit 0
+fi
+TOOLSTACK=$(/usr/lib/xen-common/bin/xen-toolstack 2>/dev/null)
+if [ $? -ne 0 ]; then
+       log_warning_msg "No usable Xen toolstack selected"
+       exit 0
+fi
+
+[ -e "$ROOT"/bin/xend ] && XEND="$ROOT"/bin/xend
+XENCONSOLED="$ROOT"/bin/xenconsoled
+XENCONSOLED_PIDFILE="/var/run/xenconsoled.pid"
+XENSTORED="$ROOT"/bin/xenstored
+XENSTORED_PIDFILE="/var/run/xenstore.pid"
+QEMU=/usr/bin/qemu-system-i386
+QEMU_PIDFILE="/var/run/qemu-dom0.pid"
+QEMU_ARGS="-xen-domid 0 -xen-attach -name dom0 -nographic -M xenpv -daemonize -monitor /dev/null -serial /dev/null -parallel /dev/null"
+
+modules_setup()
+{
+       modprobe xenfs 2>/dev/null
+       modprobe xen-evtchn 2>/dev/null
+       modprobe xen-gntdev 2>/dev/null
+}
+
+xenfs_setup()
+{
+       [ -e "/proc/xen/capabilities" ] && return 0
+       log_progress_msg "xenfs"
+       [ -d "/proc/xen" ] || return 1
+       mount -t xenfs xenfs /proc/xen || return 1
+       return 0
+}
+
+capability_check()
+{
+       [ -e "/proc/xen/capabilities" ] || return 1
+       grep -q "control_d" /proc/xen/capabilities || return 1
+       return 0
+}
+
+env_setup()
+{
+       [ -d /run/xen ] && return 0
+
+       mkdir -m 700 /run/xen
+       [ -x /sbin/restorecon ] && /sbin/restorecon /run/xen
+}
+
+xend_start()
+{
+       if [ -z "$XEND" ] || [ "$(basename "$TOOLSTACK")" != xm ]; then
+               return 0
+       fi
+
+       log_progress_msg "xend"
+       xend_start_real
+       return $?
+}
+
+xend_stop()
+{
+       if [ -z "$XEND" ] || [ "$(basename "$TOOLSTACK")" != xm ]; then
+               return 0
+       fi
+
+       log_progress_msg "xend"
+       xend_stop_real
+       return $?
+}
+
+xend_restart()
+{
+       if [ -z "$XEND" ] || [ "$(basename "$TOOLSTACK")" != xm ]; then
+               return 0
+       fi
+
+       log_progress_msg "xend"
+       xend_stop_real
+       case "$?" in
+               0|1)
+               xend_start_real
+               case "$?" in
+                       0) ;;
+                       *) return 2 ;;
+               esac
+               ;;
+               *) return 2 ;;
+       esac
+       return 0
+}
+
+xend_start_real()
+{
+       $XEND status && return 1
+       $XEND start || return 2
+
+       i=0
+       while [ $i -lt 10 ]; do
+               $XEND status && return 0 || true
+               i=$(($i + 1))
+               sleep 1
+       done
+       return 2
+}
+
+xend_stop_real()
+{
+       log_progress_msg "xend"
+       $XEND status || return 0
+       $XEND stop || return 1
+}
+
+xenconsoled_start()
+{
+       log_progress_msg "xenconsoled"
+       xenconsoled_start_real
+       return $?
+}
+
+xenconsoled_stop()
+{
+       log_progress_msg "xenconsoled"
+       xenconsoled_stop_real
+       return $?
+}
+
+xenconsoled_restart()
+{
+       log_progress_msg "xenconsoled"
+       xenconsoled_stop_real
+       case "$?" in
+               0|1)
+               xenconsoled_start_real
+               case "$?" in
+                       0) ;;
+                       *) return 2 ;;
+               esac
+               ;;
+               *) return 2 ;;
+       esac
+       return 0
+}
+
+xenconsoled_start_real()
+{
+       start-stop-daemon --start --quiet --pidfile "$XENCONSOLED_PIDFILE" --exec "$XENCONSOLED" --test > /dev/null \
+               || return 1
+       start-stop-daemon --start --quiet --pidfile "$XENCONSOLED_PIDFILE" --exec "$XENCONSOLED" -- \
+               $XENCONSOLED_ARGS --pid-file="$XENCONSOLED_PIDFILE" \
+               || return 2
+}
+
+xenconsoled_stop_real()
+{
+       start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile "$XENCONSOLED_PIDFILE" --name xenconsoled
+       RETVAL="$?"
+       [ "$RETVAL" = 2 ] && return 2
+       start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec "$XENCONSOLED"
+       [ "$?" = 2 ] && return 2
+       rm -f $XENCONSOLED_PIDFILE
+       return "$RETVAL"
+}
+
+qemu_start()
+{
+       [ -x $QEMU ] || return 0
+       log_progress_msg "qemu"
+       qemu_start_real
+       return $?
+}
+
+qemu_stop()
+{
+       [ -x $QEMU ] || return 0
+       log_progress_msg "qemu"
+       qemu_stop_real
+       return $?
+}
+
+qemu_restart()
+{
+       [ -x $QEMU ] || return 0
+       log_progress_msg "qemu"
+       qemu_stop_real
+       case "$?" in
+               0|1)
+               qemu_start_real
+               case "$?" in
+                       0) ;;
+                       *) return 2 ;;
+               esac
+               ;;
+               *) return 2 ;;
+       esac
+       return 0
+}
+
+qemu_start_real()
+{
+       start-stop-daemon --start --quiet --pidfile "$QEMU_PIDFILE" --exec "$QEMU" --test > /dev/null \
+               || return 1
+       start-stop-daemon --start --quiet --pidfile "$QEMU_PIDFILE" --exec "$QEMU" -- \
+               $QEMU_ARGS -pidfile "$QEMU_PIDFILE" \
+               || return 2
+}
+
+qemu_stop_real()
+{
+       start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile "$QEMU_PIDFILE" --exec "$QEMU"
+       RETVAL="$?"
+       [ "$RETVAL" = 2 ] && return 2
+       rm -f $QEMU_PIDFILE
+       return "$RETVAL"
+}
+
+
+xenstored_start()
+{
+       log_progress_msg "xenstored"
+       start-stop-daemon --start --quiet --pidfile "$XENSTORED_PIDFILE" --exec "$XENSTORED" --test > /dev/null \
+               || return 1
+       [ -d "$XENSTORED_DIR" ] || mkdir -p "$XENSTORED_DIR"
+       [ -x /sbin/restorecon ] && /sbin/restorecon "$XENSTORED_DIR"
+       export XENSTORED_ROOTDIR="$XENSTORED_DIR"
+       start-stop-daemon --start --quiet --pidfile "$XENSTORED_PIDFILE" --exec "$XENSTORED" -- \
+               $XENSTORED_ARGS --pid-file="$XENSTORED_PIDFILE" \
+               || return 2
+
+       # Wait for xenstored to actually come up, timing out after 30 seconds
+       local time=0
+       local timeout=30
+       while [ $time -lt $timeout ] && ! `xenstore-read -s / >/dev/null 2>&1` ; do
+           time=$(( $time+1 ))
+           sleep 1
+       done
+
+       # Exit if we timed out
+       if ! [ $time -lt $timeout ] ; then
+           return 2
+       fi
+}
+
+init_dom0()
+{
+       log_progress_msg "init-dom0"
+       if [ -e $ROOT/bin/xen-init-dom0 ] ; then
+           $ROOT/bin/xen-init-dom0 > /dev/null
+       else
+           xenstore-write "/local/domain/0/name" "Domain-0"
+           xenstore-write "/local/domain/0/domid" "0"
+       fi
+}
+
+case "$1" in
+  start)
+       log_daemon_msg "Starting $DESC"
+       modules_setup
+       xenfs_setup
+       case "$?" in
+               0) ;;
+               *) log_end_msg 1; exit ;;
+       esac
+       capability_check
+       case "$?" in
+               0) ;;
+               *) log_end_msg 255; exit ;;
+       esac
+       env_setup
+       xenstored_start
+       case "$?" in
+               0|1) ;;
+               *) log_end_msg 1; exit ;;
+       esac
+       xenconsoled_start
+       case "$?" in
+               0|1) ;;
+               *) log_end_msg 1; exit ;;
+       esac
+       xend_start
+       case "$?" in
+               0|1) ;;
+               *) log_end_msg 1; exit ;;
+       esac
+       init_dom0
+       case "$?" in
+               0|1) ;;
+               *) log_end_msg 1; exit ;;
+       esac
+       qemu_start
+       case "$?" in
+               0|1) ;;
+               *) log_end_msg 1; exit ;;
+       esac
+       log_end_msg 0
+       ;;
+  stop)
+       capability_check
+       case "$?" in
+               0) ;;
+               *) exit ;;
+       esac
+       log_daemon_msg "Stopping $DESC"
+       ret=0
+       qemu_stop
+       case "$?" in
+               0|1) ;;
+               *) ret=1 ;;
+       esac
+       xend_stop
+       case "$?" in
+               0|1) ;;
+               *) ret=1 ;;
+       esac
+       xenconsoled_stop
+       case "$?" in
+               0|1) ;;
+               *) ret=1 ;;
+       esac
+       log_end_msg $ret
+       ;;
+  restart|force-reload)
+       capability_check
+       case "$?" in
+               0) ;;
+               *) exit ;;
+       esac
+       log_daemon_msg "Restarting $DESC"
+       ret=0
+       qemu_restart
+       case "$?" in
+               0|1) ;;
+               *) ret=1 ;;
+       esac
+       xend_restart
+       case "$?" in
+               0|1) ;;
+               *) ret=1 ;;
+       esac
+       xenconsoled_restart
+       case "$?" in
+               0|1) ;;
+               *) ret=1 ;;
+       esac
+       log_end_msg $ret
+       ;;
+  *)
+       echo "Usage: $0 {start|stop|restart|force-reload}" >&2
+       exit 3
+       ;;
+esac
+
+exit 0
diff --git a/xen-utils-common.xend.default b/xen-utils-common.xend.default
new file mode 100644 (file)
index 0000000..589da35
--- /dev/null
@@ -0,0 +1,2 @@
+XENCONSOLED_ARGS=
+XENSTORED_ARGS=
diff --git a/xen-utils-common.xendomains.default b/xen-utils-common.xendomains.default
new file mode 100644 (file)
index 0000000..34aeb12
--- /dev/null
@@ -0,0 +1,60 @@
+# The xendomains script can send SysRq requests to domains on shutdown.
+# If you don't want to MIGRATE, SAVE, or SHUTDOWN, this may be a possibility
+# to do a quick and dirty shutdown ("s e i u o") or at least sync the disks
+# of the domains ("s").
+#
+# XENDOMAINS_SYSRQ=
+
+# Set this to a non-empty string if you want to migrate virtual machines
+# on shutdown. The string will be passed to the xm migrate DOMID command
+# as is: It should contain the target IP address of the physical machine
+# to migrate to and optionally parameters like --live. Leave empty if
+# you don't want to try virtual machine relocation on shutdown.
+# If migration succeeds, neither SAVE nor SHUTDOWN will be executed for
+# that domain.
+#
+# XENDOMAINS_MIGRATE=
+
+# Directory to save running domains to when the system (dom0) is
+# shut down. Will also be used to restore domains from if # XENDOMAINS_RESTORE
+# is set (see below). Leave empty to disable domain saving on shutdown 
+# (e.g. because you rather shut domains down).
+# If domain saving does succeed, SHUTDOWN will not be executed.
+#
+XENDOMAINS_SAVE=/var/lib/xen/save
+
+# This variable determines whether saved domains from XENDOMAINS_SAVE
+# will be restored on system startup. 
+#
+XENDOMAINS_RESTORE=true
+
+# This variable sets the directory where domains configurations
+# are stored that should be started on system startup automatically.
+# Leave empty if you don't want to start domains automatically
+# (or just don't place any xen domain config files in that dir).
+# Note that the script tries to be clever if both RESTORE and AUTO are 
+# set: It will first restore saved domains and then only start domains
+# in AUTO which are not running yet. 
+# Note that the name matching is somewhat fuzzy.
+#
+XENDOMAINS_AUTO=/etc/xen/auto
+
+# On xendomains stop, a number of xm commands (xm migrate, save, shutdown,
+# shutdown --all) may be executed. In the worst case, these commands may
+# stall forever, which will prevent a successful shutdown of the machine.
+# If this variable is non-zero, the script will set up a watchdog timer
+# for every of these xm commands and time it out after the number of seconds
+# specified by this variable.
+# Note that SHUTDOWN_ALL will not be called if no virtual machines or only
+# zombies are still running, so you don't need to enable this timeout just
+# for the zombie case.
+# The setting should be large enough to make sure that migrate/save/shutdown
+# can succeed. If you do live migrations, keep in mind that live migration
+# of a 1GB machine over Gigabit ethernet may actually take something like
+# 100s (assuming that live migration uses 10% of the network # bandwidth).
+# Depending on the virtual machine, a shutdown may also require a significant
+# amount of time. So better setup this variable to a huge number and hope the
+# watchdog never fires.
+#
+XENDOMAINS_STOP_MAXWAIT=300
+
diff --git a/xen-utils-common.xendomains.init b/xen-utils-common.xendomains.init
new file mode 100644 (file)
index 0000000..e1164b2
--- /dev/null
@@ -0,0 +1,228 @@
+#!/bin/bash
+### BEGIN INIT INFO
+# Provides:          xendomains
+# Required-Start:    $syslog $remote_fs xen
+# Required-Stop:     $syslog $remote_fs xen
+# Should-Start:      drbd iscsi openvswitch-switch
+# Should-Stop:       drbd iscsi openvswitch-switch
+# X-Start-Before:    corosync heartbeat libvirtd
+# X-Stop-After:      corosync heartbeat libvirtd
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Start/stop secondary xen domains
+# Description:       Start / stop domains automatically when domain 0 
+#                    boots / shuts down.
+### END INIT INFO
+
+. /lib/init/vars.sh
+. /lib/lsb/init-functions
+
+xen list &> /dev/null
+if test $? -ne 0
+then
+       exit 0;
+fi
+
+TOOLSTACK=$(/usr/lib/xen-common/bin/xen-toolstack 2>/dev/null)
+if [ $? -ne 0 ]; then
+        log_warning_msg "No usable Xen toolstack selected"
+        exit 0
+fi
+if [ "$(basename "$TOOLSTACK")" != xm ] && [ "$(basename "$TOOLSTACK")" != xl ]; then
+       exit 0
+fi
+
+if ! [ -e /proc/xen/privcmd ]; then
+       exit 0
+fi
+
+[ -r /etc/default/xendomains ] && . /etc/default/xendomains
+
+shopt -s nullglob
+
+check_config_name()
+{
+  /usr/lib/xen-common/bin/xen-init-name "$1" 2>/dev/null
+}
+
+check_running()
+{
+  xen domid "$1" > /dev/null 2>&1
+  return $?
+}
+
+timeout_coproc()
+{
+  local TIMEOUT=$1
+  shift
+
+  coproc "$@" 2>&1 1>/dev/null
+
+  local COPROC_OUT
+  exec {COPROC_OUT}<&"${COPROC[0]}"
+  local PID="$COPROC_PID"
+
+  for no in $(seq 0 $TIMEOUT); do
+    if [ -z "$COPROC_PID" ]; then break; fi
+    sleep 1
+    log_action_cont_msg
+  done
+
+  kill -INT "$COPROC_PID" >/dev/null 2>&1
+  wait $PID
+  local rc=$?
+  log_action_end_msg $rc
+
+  [ $rc -gt 0 ] && cat <&$COPROC_OUT
+  exec <&$COPROC_OUT-
+}
+
+timeout_domain()
+{
+  name="$1"
+  TIMEOUT="$2"
+  for no in $(seq 0 $TIMEOUT); do
+    if ! check_running "$name"; then return 0; fi
+    sleep 1
+    log_action_cont_msg
+  done
+  return 1
+}
+
+do_start_restore()
+{
+  [ -n "$XENDOMAINS_SAVE" ] || return
+  [ -d "$XENDOMAINS_SAVE" ] || return
+  [ -n "$XENDOMAINS_RESTORE" ] || return
+
+  for file in $XENDOMAINS_SAVE/*; do
+    if [ -f $file ] ; then
+      name="${file##*/}"
+      log_action_begin_msg "Restoring Xen domain $name (from $file)"
+
+      out=$(xen restore "$file" 2>&1 1>/dev/null)
+      case "$?" in
+        0) 
+          rm "$file"
+          domains[$name]='started'
+          log_action_end_msg 0
+          ;;
+        *) 
+          domains[$name]='failed'
+          log_action_end_msg 1
+          echo "$out"
+          ;;
+      esac
+    fi
+  done
+}
+
+do_start_auto()
+{
+  [ -n "$XENDOMAINS_AUTO" ] || return
+  [ -d "$XENDOMAINS_AUTO" ] || return
+
+  for file in $XENDOMAINS_AUTO/*; do
+    name="$(check_config_name $file)"
+
+    if [ "${domains[$name]}" = started ]; then
+      :
+    elif check_running "$name"; then
+      log_action_msg "Xen domain $name already running"
+    else
+      log_action_begin_msg "Starting Xen domain $name (from $file)"
+
+      if [ "${domains[$name]}" = failed ]; then
+        log_action_end_msg 1 "restore failed"
+      else
+        out=$(xen create --quiet --defconfig "$file" 2>&1 1>/dev/null)
+        case "$?" in
+          0) 
+            log_action_end_msg 0
+            ;;
+          *) 
+            log_action_end_msg 1
+            echo "$out"
+            ;;
+        esac
+      fi
+    fi
+  done
+}
+
+do_start() 
+{
+  declare -A domains
+
+  do_start_restore
+  do_start_auto
+}
+
+do_stop_migrate()
+{
+  [ -n "$XENDOMAINS_MIGRATE" ] || return
+
+  while read id name rest; do
+    log_action_begin_msg "Migrating Xen domain $name ($id)"
+    (timeout_coproc "$XENDOMAINS_STOP_MAXWAIT" xen migrate $id $XENDOMAINS_MIGRATE)
+  done < <(/usr/lib/xen-common/bin/xen-init-list)
+}
+
+do_stop_save()
+{
+  [ -n "$XENDOMAINS_SAVE" ] || return
+  [ -d "$XENDOMAINS_SAVE" ] || mkdir -m 0700 -p "$XENDOMAINS_SAVE"
+
+  while read id name rest; do
+    log_action_begin_msg "Saving Xen domain $name ($id)"
+    (timeout_coproc "$XENDOMAINS_STOP_MAXWAIT" xen save $id $XENDOMAINS_SAVE/$name)
+  done < <(/usr/lib/xen-common/bin/xen-init-list)
+}
+
+do_stop_shutdown()
+{
+  while read id name rest; do
+    log_action_begin_msg "Shutting down Xen domain $name ($id)"
+    xen shutdown $id 2>&1 1>/dev/null
+    log_action_end_msg $?
+  done < <(/usr/lib/xen-common/bin/xen-init-list)
+  while read id name rest; do
+    log_action_begin_msg "Waiting for Xen domain $name ($id) to shut down"
+    timeout_domain "$name" "$XENDOMAINS_STOP_MAXWAIT"
+    log_action_end_msg $?
+  done < <(/usr/lib/xen-common/bin/xen-init-list)
+}
+
+do_stop()
+{
+  do_stop_migrate
+  do_stop_save
+  do_stop_shutdown
+}
+
+case "$1" in
+  start)
+    do_start
+    ;;
+
+  stop)
+    do_stop
+    ;;
+
+  restart)
+    do_stop
+    do_start
+    ;;
+
+  reload|force-reload)
+    do_stop
+    do_start
+    ;;
+
+  *)
+    echo "Usage: $0 {start|stop|restart|reload|force-reload}"
+    exit 3
+    ;;
+esac
+
+exit 0
diff --git a/xen-utils.NEWS b/xen-utils.NEWS
new file mode 100644 (file)
index 0000000..607c164
--- /dev/null
@@ -0,0 +1,8 @@
+xen-3.0 (3.4.0-1) UNRELEASED; urgency=low
+
+  This version does not longer ship the ioemu part, aka the patched qemu.
+  So it does not support
+  * full virtualized domains and
+  * virtual console support for paravirtualized domains.
+
+ -- Bastian Blank <waldi@debian.org>  Sat, 18 Jul 2009 15:05:31 +0200
diff --git a/xen-utils.README.Debian b/xen-utils.README.Debian
new file mode 100644 (file)
index 0000000..33bc454
--- /dev/null
@@ -0,0 +1,53 @@
+Xen for Debian
+==============
+
+Config behaviour
+----------------
+
+The Debian packages changes the behaviour of some config options.
+
+The options "kernel", "initrd" and "loader" searches in the Xen private boot
+directory (/usr/lib/xen-$version/boot) first. "bootloader" and "device_model"
+also searches the Xen private bin directory (/usr/lib/xen-$version/bin). This
+means that the following entries will properly find anything:
+  loader = 'hvmloader'
+  bootloader = 'pygrub'
+
+Network setup
+-------------
+
+The Debian package of Xen don't change the network setup in any way.  This
+differs from the upstream version, which overwrites the main network card
+(eth0) with a bridge setup and may break the network at this point..
+
+To setup a bridge please follow the instructions in the manpage for
+bridge-utils-interfaces(5).
+
+You can also change the /etc/xen/xend-config.sxp file and re-enable the Xen
+included network setup by adding
+  (network-script network-bridge)
+to the file. But please note that this may or may not work.
+
+Loop devices
+------------
+
+If you plan hosting virtual domains with file backed block devices (ie. the
+ones xen-tools creates by default) be careful about two issues:
+
+1. Maximum number of loop devices
+   By default the loop driver supports a maximum of 8 loop devices. Of
+   course since every Xen domain uses at least two (one for the data and one
+   for the swap) this number is absolutely insufficient. You should increase
+   it by adding a file named local-loop in /etc/modprobe.d containing the
+   string "options loop max_loop=128", if the loop driver is compiled as a
+   module, or by appending the string max_loop=128 to your kernel parameters
+   if the driver is in-kernel. Of course you can increase or decrease the
+   number 128 as you see fit.
+
+2. Driver loading (only if loop is compiled as a module)
+   Normally the loop driver gets loaded when the first loop device is
+   accessed. When using udev, though, the loop devices get created only
+   after the driver gets loaded. This means that Xen will fail if the loop
+   driver is not already loaded when it tries to start a file-backed virtual
+   domain.  To fix this just add "loop" in your /etc/modules file, thus
+   forcing it to be loaded at boot time.
diff --git a/xenstore-utils.install b/xenstore-utils.install
new file mode 100644 (file)
index 0000000..199b491
--- /dev/null
@@ -0,0 +1 @@
+usr/bin/xenstore-*